Ember.js:Model.createRecord不工作,没有错误

时间:2013-02-28 21:10:19

标签: ember.js ember-data

使用允许帐户将消息发布到社交媒体的应用程序。我正在尝试将我的第一条消息保存到Ember Data商店,但它似乎没有起作用。问题是它也没有错误,所以我不确定发生了什么。这是设置:

模型

Social.Account = DS.Model.extend({
    username: DS.attr('string'),
    messages: DS.hasMany('Social.Message')
});

Social.Message = DS.Model.extend({
    user_id: DS.attr('number'),
    text: DS.attr('string'),
    accounts: DS.hasMany('Social.Account'),
    posts: DS.hasMany('Social.Post')
});

Social.Post = DS.Model.extend({
    created: DS.attr('date'),
    text: DS.attr('string'),
    message: DS.belongsTo('Social.Message')
});

数据

Social.Account.FIXTURES = [{
    id: 1,
    username: "commadelimited",
    messages: [1, 2]
}];

Social.Message.FIXTURES = [{
    id: 1,
    user_id: 1,
    text: 'This is message #1 sent by account #1',
    accounts: [1],
    posts: [1]
}, {
    id: 2,
    user_id: 1,
    text: 'This is message #2 sent by account #1',
    accounts: [1],
    posts: [2]
}];

Social.Post.FIXTURES = [{
    id: 1,
    created: "5 minutes ago",
    text: 'This is post #1 sent by account #1, tied to message #1'
}, {
    id: 1,
    created: "5 minutes ago",
    text: 'This is post #2 sent by account #1, tied to message #2'
}];

在Social.NewPostView的上下文中,我有一个调用提交方法的按钮

Social.NewPostView = Ember.View.extend({
    tagName: 'div',
    submit: function(e) {
        msg = Social.Message.createRecord({
            id: 1,
            user_id: 1,
            text: 'This was a created message',
            created: "2013-02-27 13:09:22",
            accounts: [1],
            posts: [1]
        });
        console.log('done');
    }
});

我可以在用户点击按钮时触发警告框,因此我知道该方法正在触发。你可以看到我在这里硬编码了一个createRecord调用(但在应用程序中我正在使用用户输入的数据)。日志语句显示在控制台中,但我没有看到UI按预期更改。另外,当我对用户1的帐户对象进行内省时,我得到0长度:

Social.Account.find().objectAt(0).get('messages').get('length')

当我在控制台中运行此语句时,我会显示一些内容:

Social.Message.createRecord({ user_id: 1, text: 'This was a created message', created: "2013-02-27 13:09:22", accounts: [1], posts: [1] })

但这是一个复杂的对象,我不确定它究竟是什么。我将我的代码基于@toranb的complex-ember-data-example项目,看起来可比。我确定我做错了什么,但我不知道它是什么。任何输入都会被重视。

更新1

通过在提交之前记录Social.Message.find().get('length')我得到0.如果我点击提交,那么立即运行相同的日志语句我得到以下内容:

4
Uncaught Error: Attempted to handle event `loadedData` on <Social.Message:ember427:1> while in state rootState.loaded.created.uncommitted. Called with undefined

这表明Message确实已创建,但未显示在UI中。我的下一步可能是什么?

1 个答案:

答案 0 :(得分:2)

您在创建记录时设置id。我不熟悉FixtureAdapter,但在任何情况下这都不是一个好主意。

更新:

我刚试过一个示例项目,并且在调用id时设置createRecord能够重现您的错误。

所以请改用此代码:

Social.NewPostView = Ember.View.extend({
  tagName: 'div',
  submit: function(e) {
    msg = Social.Message.createRecord({
//      id: 1,
        user_id: 1,
        text: 'This was a created message',
        created: "2013-02-27 13:09:22",
        accounts: [1],
        posts: [1]
    });
    console.log('done');
    }
});

你的灯具中已经有一张id为1的唱片。

更新2:

我有一个公开的PR来演示此问题并提供更好的错误消息

https://github.com/emberjs/data/pull/770