gpt4 book ai didi

javascript - Ember.js:保存记录到Ember.Data,等待响应再显示

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:35 25 4
gpt4 key购买 nike

我正在构建一个允许用户发布到 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')
});

post(状态)的生命周期从P(pending)到Q(queued)再到S(sent),E(error)也是一种可能,也是我真正要找的状态。这是 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 对象。最后几行是我认为这个新代码应该去的地方,但我不确定如何听一些可能不会回来的东西。我宁愿不“等待”一秒钟,相反,如果消息能够更新就好了。不过不确定如何实现。

想法?

最佳答案

您需要在创建记录后将代码作为回调运行。这是这样的:

msg.one('didCreate', function() {
// transition to new route showing data just created
});
Social.store.commit();

这将在记录创建时添加一次调用。还有“didUpdate”和“didDelete” Hook 。您需要在调用创建之前添加这些回调(显然)。

我不确定如何处理错误情况,因为我还没有调查过。

编辑:根据 https://github.com/emberjs/data/issues/405 这实际上是坏的,所以等待可能是目前唯一的选择。

关于javascript - Ember.js:保存记录到Ember.Data,等待响应再显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com