【问题标题】:Ember.js: Save record to Ember.Data, wait for response before displayingEmber.js:将记录保存到 Ember.Data,等待响应再显示
【发布时间】:2013-03-13 20:00:40
【问题描述】:

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

想法?

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

    创建记录后,您需要将代码作为回调运行。方法如下:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        • 2017-02-06
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2013-10-19
        • 2021-03-06
        相关资源
        最近更新 更多