以编程方式设置itemController的计算属性

时间:2014-04-12 21:59:33

标签: ember.js ember-data

我有一个包含以下代码的模板:

{{#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}}

typessetupController中设置:

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手动删除类并取消选中该复选框似乎在第一个实例中工作,但问题是,计算属性不会更新并且会使事情变得混乱。

知道如何实现我的目标吗? 如果有什么不清楚,请告诉我,我会尽力澄清。 谢谢。

2 个答案:

答案 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'));
   });
});

我会推荐第一个。