首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >骨干网获取多个模型

骨干网获取多个模型
EN

Stack Overflow用户
提问于 2014-11-26 05:00:06
回答 1查看 823关注 0票数 1

我一直在和骨干一起工作,我很快就发现我正在做的事情变得过于乏味和重复。

我将有多个主干视图,其中每个视图都有一个模型,该模型调用一个api来获取数据。一旦完成,我想呈现结果。不过,很简单,我必须将来自另一个源(消息传递系统)的数据附加到每个模型上。

代码语言:javascript
复制
//this corresponds to the view
$.when(this.model.fetch(), this.msg.fetch()).done((result1, result2) => {
    this.model.set('msg', this.msgtoJSON(), { silent: true });
    this.renderTemplate(template, this.model.toJSON());
});

这是可行的,但在任何地方都是重复的。我对此有几十种看法。这也使我无法在主模型上附加更改事件的对象侦听器,这样模板就可以重新呈现。

有人对我如何异步地获取这个消息依赖并在获取这些模型时注入到我的骨干模型有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-26 08:01:33

您可以使它们相互依赖,合并两个模型的fetch。它会破坏Backbone.Model.fetch的一些本机实现,但会帮助您避免代码重复。某种程度上去变性来正常化。

代码语言:javascript
复制
var Slave = Backbone.Model.extend({
     urlRoot: 'first/api',
     defaults: {
         val1: '',
         val2: ''
     }
});  

var Master = Backbone.Model.extend({
    initialize: function(options) {
        this.slave = options.slave;
    }, 
    urlRoot: 'second/api', 
    fetch: function(options) {
        var that = this,
            masterPromise = this.constructor.__super__.fetch.call(this, options);

        if (this.slave) {
            return $.when(masterPromise, this.slave.fetch()).done(function(result1, result2){ //merged promise
                that.set('msg', that.slave.toJSON(), { silent: true });                 
            });
        }
        return masterPromise;
    }
});

然后:

代码语言:javascript
复制
var slave  = new Slave(),
    master = new Master({ slave: slave });

master.fetch().done(function(){
   // render template here.
})

此实现将适用于这两种情况,无论是从模型还是非从属模型。

需要注意的几件事,

1.如果您处理成功回调以将模板呈现为:

代码语言:javascript
复制
master.fetch({success: function() { // rendering here}});

在这种情况下,'msg'将是未定义的,因为success不会等待奴隶的承诺。您需要避免使用success

2.如果模型的 fetch 中的一个失败了,并且将fail回调设置为合并承诺,那么当模型的fetch失败时,它就会触发。如果您需要为每个模型的失败案例分别做一些工作人员,则需要在合并承诺之前将它们附加到模型的fetch上。

PS。我还没有测试过这段代码,所以如果有什么问题,请告诉我。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27141666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档