push Object与parent in有很多关系

时间:2014-01-06 23:39:17

标签: ember.js ember-data

当尝试将新创建的对象推送到具有多个关系的父级时,我运行错误:

Assertion failed: The content property of DS.PromiseArray should be set before modifying it

这是我的代码。

    App.User = DS.Model.extend({
        name : DS.attr('string'),
        selections : DS.hasMany('selection', {async: true}),
        creationDate : DS.attr('date')
    });

    App.Selection = DS.Model.extend({
        value : DS.attr('string')
    });

    App.PollController = Ember.ObjectController.extend({
        actions: {
            save: function(){
                // create new user record in store
                var newUser = this.store.createRecord('user', {
                    name : this.get('newUserName'),
                    creationDate : new Date()
                });

                // create new selection record in store
                var newSelection = this.store.createRecord('selection', {
                    id : 11,
                    value : "hallo"
                });

                // push selection to user
                newUser.get('selections').pushObject(newSelection);

                // save new user
                newUser.save();
            }
        }
    });

当我尝试将newSelection对象推送到选择用户模型数组时出错。

还尝试将行更改为

                // push selection to user
                newUser.get('selections').then(function(selections){
                    selections.pushObject(newSelection);
                });

然后我没有收到错误,但是newSelection没有被推送给用户。选择用户数组保持为空。

我做错了什么?我完全错了吗?或者EmberJs / Ember数据中有错误吗?

我正在使用EmberJS 1.2.0和Ember Data beta 5。

1 个答案:

答案 0 :(得分:8)

我假设您说保存没有发回选择,导致您的添加代码是正确的。

重要的是要注意承诺是异步发生的

            newUser.get('selections').then(function(selections){
                // this will happen after save
                selections.pushObject(newSelection);
            });

            newUser.save();

您应该等待保存,直到推送选择

http://emberjs.jsbin.com/gotasa/1/edit?html,js,output

            newUser.get('selections').then(function(selections){
                selections.pushObject(newSelection);
                newUser.save();
            });