使用允许帐户将消息发布到社交媒体的应用程序。我正在尝试将我的第一条消息保存到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中。我的下一步可能是什么?
答案 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来演示此问题并提供更好的错误消息