[英]How to set Ember component's internal state from parent component?
I have a table component which continas several row components. 我有一个表组件,它连续几个行组件。 Each row component has a
isSelected
property. 每个行组件都有一个
isSelected
属性。
Once a while I would like to reset all row components' isSelected
inside to false
from table's component clear
action (a button). 偶尔我想通过表的组件
clear
操作(一个按钮)将所有行组件的isSelected
内部重置为false
。
How can I achive this functionality? 如何实现此功能? Does passing data down is the only way to alter the internal state of a component?
传递数据是否是更改组件内部状态的唯一方法?
Row Component 行组件
export default Ember.Component.extend({
tagName: 'tr',
isSelected: false,
classNameBindings: ['isSelected:selected'],
click() {
const data = this.get('data');
const selectedState = this.get('isSelected');
this._toggleSelected();
if (selectedState) {
this.sendAction('rowClicked', {data: data, operator: 'remove'});
} else {
this.sendAction('rowClicked', {data: data, operator: 'add'});
}
},
_toggleSelected() {
this.toggleProperty('isSelected');
}
});
Table Selectable Component 表可选组件
export default Ember.Component.extend({
selectedRows: [],
classNames: ['table-selectable'],
actions: {
rowClicked(row) {
this._addToSelectedRows(row);
},
cleanSelectedRows() {
this._cleanSelectedRows();
}
},
_addToSelectedRows(row) {
console.log(row);
this.get('selectedRows').addObject(row);
},
_cleanSelectedRows() {
this.set('selectedRows', []);
}
});
A table is composed of some rows. 一个表由一些行组成。 You could keep references of rows in table and call their public methods.
您可以在表中保留行的引用并调用其公共方法。
//row.js
export default Ember.Component.extend({
didInsertElement(){
this._super(...arguments);
this.get('table').registerRow(this);
},
setSelected(selected){
this.set('isSelected', selected);
}
});
//table.js
export default Ember.Component.extend({
rows: Ember.computed(function(){return Ember.A();}),
registerRow(row){
this.get('rows').pushObject(row);
},
clearAll(){
this.get('rows').forEach(function(row){
row.setSelected(false);
});
}
});
//table.hbs
{{table-row table=this}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.