4

我正在构建一个允许用户发布到 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 对象。最后几行是我认为这个新代码会去的地方,但我不确定如何听一些可能不会回来的东西。我宁愿不要“等待”一秒钟,如果消息可以更新就好了。不知道如何做到这一点。

想法?

4

2 回答 2

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,所以等待可能是目前唯一的选择。

于 2013-03-13T20:21:10.997 回答
0

听起来您不想在这里使用双向数据绑定,而您可能会受益于单向数据绑定。这是一篇很棒的全长博客文章,更深入地解释了它

http://www.solitr.com/blog/2012/06/ember-input-field-with-save-button/

于 2013-03-13T20:36:25.573 回答