我有一个包含以下代码的模板:
{{#each types itemController='type'}}
<div class='col checkbox'>
<label>
{{input type='checkbox' checked=isSelected disabled=notAllowed}}
<span {{bind-attr class='isSelected'}}>{{name}}</span>
</label>
</div>
{{/each}}
types
在setupController
中设置:
this.store.find('type').then(function(types){
controller.set('types', types);
});`
//Having 2 other models here that I am setting and having an itemController for, exactly in the same fashion as types.
表示ArrayController
的{{1}}。
注意:为了澄清,我正在使用和设置3种不同的模型,它们的工作方式与类型相同,这使得它更复杂。
然后是itemController
本身:
itemController
现在问题是:我有一个App.TagController = Ember.ObjectController.extend({
isSelected: function(key, value){
//bunch of code that does some stuff and returns true or false depending on value
}.property()
});
App.TypeController = App.TagController.extend();
应该取消选中所有复选框并删除resetbutton
。
我会考虑使用span classes
(在action
中)将所有ArrayController
属性设置为isSelected
,但我似乎无法找到访问和手动设置false
计算属性的方法。
我在itemController
中尝试过的一件事如下:
ArrayController
但不幸的是,这会返回actions: {
resetFilters: function(){
this.get('types').forEach(function(type) {
console.log(type.get('isSelected'));
//type.set('isSelected', false);
});
}
}
。并且使用jQuery手动删除类并取消选中该复选框似乎在第一个实例中工作,但问题是,计算属性不会更新并且会使事情变得混乱。
知道如何实现我的目标吗? 如果有什么不清楚,请告诉我,我会尽力澄清。 谢谢。
答案 0 :(得分:0)
您正在设置controller.types
,这不适用于itemController
。您应该始终设置数组控制器的content
属性。
以下内容应该有效:
controller.set('content', this.store.find('type'));
然后设置isSelected
:
controller.setEach('isSelected', false);
这假定控制器是ArrayController
的一个实例,其定义中设置了itemController
,例如
App.TypesController = Em.ArrayController.extend({itemController: 'type'});
答案 1 :(得分:-1)
store.find
返回PromiseArray,因此应首先解析它。您可以在setupController中设置类型如下:
this.store.find('type').then(function(types){
controller.set('types', types);
});
或者您可以在重置中解析类型:
this.get('types').then(function(types) {
types.forEach(function(type) {
console.log(type.get('isSelected'));
});
});
我会推荐第一个。