EmberJS ArrayControlller 在排序后重置选择

EmberJS ArrayControlller Resets Selection After Sort

本文关键字:选择 排序 ArrayControlller EmberJS      更新时间:2023-09-26

每当更改我的ArrayController中的sortingProperties时,所有记录的选定复选框始终被重置。有没有办法保留特定记录的状态?我试图将controller换成关键字模板中的contentarrangedContent

关键字视图

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

关键字控制器

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

关键字控制器

App.KeywordsController = Ember.ArrayController.extend(Ember.Evented, {
    sortAscending: true,
    sortProperties: ['name'],
    init: function() {
        this.set('content', this.store.find('keyword', { domain_id: 1 });
    }
});

关键字模板

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

更新:jsFiddle 示例

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

随着代码中的一些更改,现在进展顺利。

我将每个块更改为使用 arrangedContent 和部分帮助程序,它呈现具有实际上下文的模板......

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

你有一个关键字 Controller 它是一个 ArrayController。调用 render 时,将为每个关键字创建一个对象控制器。将状态放在关键字控制器中,这样状态的范围就限定为单个关键字而不是集合。