将复选框绑定到 Ember 中一个数组的元素 2+
Bind checkbox to element of one array in Ember 2+
我正在尝试使用 Ember 2.8 将一个数组的元素绑定到复选框的选中属性。我也在一个组件中使用它。
复选框显示所有已标记,但每当我尝试使用操作 hideOrShowAllColumns
它不会再次标记所有复选框,如果有一个未选中...所以我想我通过了数组元素的值而不是元素本身。我不知道如何在 javascript/ember...
中执行此操作
这是我的看法
{{input type="checkbox" name="all" checked=allColumnsChecked change=(action "hideOrShowAllColumns")}}
All
{{#each model_table.columns as |column index|}}
{{input type="checkbox" name=column checked=(getItemAt allColumns index) change=(action "hideOrShowColumn" index)}}
{{column}}
{{/each}}
这是我的component.js
export default Ember.Component.extend({
init() {
this._super(...arguments);
this.set('allColumnsChecked', true);
},
didReceiveAttrs() {
this._super(...arguments);
let columnMap = this.get('columnMap');
let allColumns = Array(columnMap.length).fill(true);
this.set('allColumns', allColumns);
},
actions: {
hideOrShowAllColumns() {
let all = this.get('allColumnsChecked');
all = !all;
this.set('allColumnsChecked', all);
if (all === true) {
let allColumns = this.get('allColumns');
allColumns = allColumns.map(() => true);
this.set('allColumns', allColumns);
}
},
}
助手 getItemAt
export function getItemAt(params) {
return params[0][params[1]];
}
对于双向绑定,您不能使用原始类型。checked=(getItemAt allColumns index)
这部分不会练习。当您选中复选框时,它不会更新 allColumns
数组值。
所以我建议你在这个列数组中有 model_table.columns
你可以检查 属性 并且你可以在输入助手中使用它。
首先,model_table.columns
应该是一个对象数组。
model_table.columns = [
{
'name': 'foo',
'checked': true
},
{
'name': 'bar',
'checked': true
}
]
其次,使用htmlbar中的属性
{{#each model_table.columns as |column index|}}
{{input type="checkbox" name=column.name checked=column.checked change=(action "hideOrShowColumn" index)}}
{{column.name}}
{{/each}
每当您更新复选框时,它都会更新对应的 column.isChecked 属性.
更新对应的栏目需要用到
Ember.set(column, 'checked', true)
其中列是 model_table.columns
的一个元素,选中的是它的 属性
我正在尝试使用 Ember 2.8 将一个数组的元素绑定到复选框的选中属性。我也在一个组件中使用它。
复选框显示所有已标记,但每当我尝试使用操作 hideOrShowAllColumns
它不会再次标记所有复选框,如果有一个未选中...所以我想我通过了数组元素的值而不是元素本身。我不知道如何在 javascript/ember...
这是我的看法
{{input type="checkbox" name="all" checked=allColumnsChecked change=(action "hideOrShowAllColumns")}}
All
{{#each model_table.columns as |column index|}}
{{input type="checkbox" name=column checked=(getItemAt allColumns index) change=(action "hideOrShowColumn" index)}}
{{column}}
{{/each}}
这是我的component.js
export default Ember.Component.extend({
init() {
this._super(...arguments);
this.set('allColumnsChecked', true);
},
didReceiveAttrs() {
this._super(...arguments);
let columnMap = this.get('columnMap');
let allColumns = Array(columnMap.length).fill(true);
this.set('allColumns', allColumns);
},
actions: {
hideOrShowAllColumns() {
let all = this.get('allColumnsChecked');
all = !all;
this.set('allColumnsChecked', all);
if (all === true) {
let allColumns = this.get('allColumns');
allColumns = allColumns.map(() => true);
this.set('allColumns', allColumns);
}
},
}
助手 getItemAt
export function getItemAt(params) {
return params[0][params[1]];
}
对于双向绑定,您不能使用原始类型。checked=(getItemAt allColumns index)
这部分不会练习。当您选中复选框时,它不会更新 allColumns
数组值。
所以我建议你在这个列数组中有 model_table.columns
你可以检查 属性 并且你可以在输入助手中使用它。
首先,model_table.columns
应该是一个对象数组。
model_table.columns = [
{
'name': 'foo',
'checked': true
},
{
'name': 'bar',
'checked': true
}
]
其次,使用htmlbar中的属性
{{#each model_table.columns as |column index|}}
{{input type="checkbox" name=column.name checked=column.checked change=(action "hideOrShowColumn" index)}}
{{column.name}}
{{/each}
每当您更新复选框时,它都会更新对应的 column.isChecked 属性.
更新对应的栏目需要用到
Ember.set(column, 'checked', true)
其中列是 model_table.columns
的一个元素,选中的是它的 属性