EmberJS ArrayControlller在排序后重置选择

时间:2013-10-17 11:15:43

标签: javascript ember.js

每当更改sortingProperties中的ArrayController时,所有记录都会重置所选复选框。有没有办法坚持特定记录的状态?我试图在我的关键字模板中将controller替换为contentarrangedContent

KeywordView

{{view Ember.Checkbox
       class="keyword-checkbox"
       idBinding="checkboxId"
       name="id[]"
       disabledBinding="isCheckboxDisabled"
       checkedBinding="isKeywordSelected"
       valueBinding="id" }}

KeywordController

App.KeywordController = Ember.ObjectController.extend(Ember.Evented, {
    ...
    isKeywordSelected: false
    ...
});

KeywordsControlller

App.KeywordsController = Ember.ArrayController.extend(Ember.Evented, {
    sortAscending: true,
    sortProperties: ['name'],

    init: function() {
        this.set('content', this.store.find('keyword', { domain_id: 1 });
    }
});

KeywordsTemplate

{{#each keyword in controller}}
    {{render "keyword" keyword}}
{{/each}}

更新:jsFiddle示例

http://jsfiddle.net/rxgx/pJUuc/

2 个答案:

答案 0 :(得分:1)

如果您的代码发生了一些变化,那么现在进展顺利。

我更改了每个块以使用arrangeContent和部分帮助器,它使用实际上下文呈现模板...

{{#each arrangedContent}}
  {{partial keyword}}
{{/each}}

同样在关键字控制器中,我添加了一个itemController属性来为项目的控制器提供帮助,在init方法中,我添加了对this._super()的调用,以调用控制器的ember初始化代码。

App.KeywordsController = Ember.ArrayController.extend({
    itemController:'keyword',
    selectedKeywords: function() {
        return this.get('content').filterBy('isSelected', true).get('length');
    }.property('content.@each.isSelected'),

    sortAscending: true,
    sortProperties: ['name'],

    actions: {
        sort: function(property) {console.log(property);
            this.set('sortProperties', [property]);
        }
    },

    init: function() {
        this.set('content', keywords);
        this._super();    
    }
});

Jsfiddle http://jsfiddle.net/pJUuc/6/

答案 1 :(得分:0)

你有一个关键字控制器,它是一个ArrayController。调用render时,会为每个关键字创建一个ObjectController。将状态放在KeywordController中,使得状态的范围限定为单个关键字而不是集合。