Ember.Select有时会工作,但断言失败

时间:2013-12-02 23:00:39

标签: ember.js ember-data

在我的ember.js应用程序中,我有一个'用户'模型与'group'有“hasMany”关系。用户可以是零个或多个组的成员。为了允许用户选择组,我使用内置的Ember.Select视图。

如果我通过路由/users加载用户,我可以看到用户以及分配给该用户的组。如果我转到编辑路径(/users/1/edit),我会使用Ember.Select显示所有组的Universe,以及该用户的“选定”组的选择。不幸的是,当我通过/users路线转换时,没有选择任何组。如果我在编辑路线上刷新页面,我会看到按预期正确选择了组。

需要注意的另一点是,从/users转换为/users/1/edit(没有选定的组)时,我看不到任何错误。但是,当我直接从/users/1/edit路由刷新时,选择正常,但我在控制台中看到以下内容(我包含了一些堆栈):

Assertion failed: The content property of DS.PromiseArray should be set before modifying it ember.js:394
(anonymous function) ember.js:394
Ember.assert ember.js:53
Ember.ArrayProxy.Ember.Object.extend._replace ember.js:16284
Ember.ArrayProxy.Ember.Object.extend.replace ember.js:16291
Ember.EnumerableUtils.replace ember.js:1829
Ember.Select.Ember.View.extend._changeMultiple ember.js:27933
Ember.Select.Ember.View.extend._change ember.js:27859
Ember.Select.Ember.View.extend._triggerChange ember.js:27902
sendEvent ember.js:2334

任何指针都会有所帮助!

user_model.js

Usermanagement.User = DS.Model.extend({
    authenticateExternally: DS.attr(),
    email: DS.attr(),
    enabled: DS.attr(),
    firstName: DS.attr(),
    lastName: DS.attr(),
    password: DS.attr(),
    systemExternalAuthenticationEnabled: DS.attr(),
    selectedGroups: DS.hasMany('group', {
        async: true
    }),
    username: DS.attr(),
    meta: DS.attr(),

    fullName: function() {
        return '%@ %@'.fmt(this.get('firstName'), this.get('lastName'));
    }.property('firstName', 'lastName'),
});

user_edit_template.hbs :(摘要)

          <div class="field form-group">
            <div class="fieldLabel">Groups</div>
              {{view Ember.Select
                multiple="true"
                class="form-control"
                selectionBinding="selectedGroups"
                contentBinding="controllers.groups.allGroups"
                optionLabelPath="content.name"
                optionValuePath="content.id"}}
          </div>

groups_controller.js

Usermanagement.GroupsController = Ember.ArrayController.extend({
    allGroups: function() {
        return this.store.find('group');
    }.property()
});

编辑:忘记提及,Ember v1.0.0,Ember-data v1.0.0-beta3

1 个答案:

答案 0 :(得分:1)

错误是抱怨在完成加载之前选择模型(user.selectedGroups)。

选择none的原因可能是因为它们可能是不同的对象。您可以迭代所选项目和allGroups选项中的每个项目,并检查其上的ember guid,如果它们是不同的项目,那么这就是它没有将它们显示为已选中的原因。

出于好奇,您可以尝试在应用程序路径的setupController中设置控制器吗?

App.ApplicationRoute = Em.Route.extend({
  setupController: function(controller, model){
    this._super(controller, model);

    this.controllerFor('groups').set('model', this.store.find('group'));
  }
});

{{view Ember.Select
            multiple="true"
            class="form-control"
            selectionBinding="selectedGroups"
            contentBinding="controllers.groups.model" //instead of allGroups
            optionLabelPath="content.name"
            optionValuePath="content.id"}}