我正在构建一个允许用户发布到Twitter的应用。当他们点击提交按钮时,我们会关闭发布表单。我们创建一个Message对象,该对象保存到数据存储并发送到服务器。服务器创建一个Post对象,然后向Twitter提交请求。然后,服务器更新Post对象,使用更新的信息回复UI。
那部分已经有效了。但我需要知道它是否不起作用,以便我可以提醒用户他们的消息没有通过并保持发布表单打开。以下是有关我的应用的一些相关信息。
Social.Message = DS.Model.extend({
text: DS.attr("string"),
created: DS.attr("date"),
isPending: DS.attr("boolean"),
posts: DS.hasMany("Social.Post")
});
Social.Post = DS.Model.extend({
text: DS.attr("string"),
status: DS.attr("string"),
created: DS.attr("date"),
message: DS.belongsTo("Social.Message"),
msgStatus: function() {
return ((this.get('status') === 'S') ? true : false);
}.property('status')
});
帖子(状态)的生命周期从P(待定)到Q(排队)到S(已发送),E(错误)也是可能,以及我正在寻找的状态。这是saveMessage方法:
saveMessage: function(text){
var acct = Social.Account.find(this.get("id")),
msg = Social.store.createRecord(
Social.Message,
{
text: text,
created: new Date()
}
);
acct.get("messages").addObject(msg);
Social.store.commit();
Ember.run.later(this, function() {
msg.get('posts').forEach(function(p){
p.reload();
});
}, 1000);
}
您可以看到我暂停一秒钟让服务器进程,然后尝试使用Twitter的响应重新加载Post对象。最后几行是我认为这个新代码会去的地方,但我不确定如何倾听那些可能不会回来的东西。我宁愿不“等待”一秒钟,相反,如果消息可以更新,那就太好了。不知道怎么做到这一点。
思想?
答案 0 :(得分:3)
创建记录后,您需要将代码作为回调运行。这是如何:
msg.one('didCreate', function() {
// transition to new route showing data just created
});
Social.store.commit();
这将在记录创建时添加一次性调用。还有'didUpdate'和'didDelete'钩子。您需要在调用create之前添加这些回调(显然)。
我不知道如何处理错误情况,因为我还没有考虑过。
修改:这实际上是按https://github.com/emberjs/data/issues/405打破的,所以等待可能是目前唯一的选择。
答案 1 :(得分:0)
听起来你不想在这里进行双向数据绑定,你可能会从单向获益。这是一篇很棒的全文博客文章,深入解释了它
http://www.solitr.com/blog/2012/06/ember-input-field-with-save-button/