2017-09-12 21 views
0

返回我有一个模型,看起来像这样:骨干JS建设从结果收集来自多个网址的

var BasicModel = Backbone.Model.extend({ 
defaults: { 
    a: '', 
    b: '', 
    c: '', 
    d: '', 
    e: '' 
}, 
idAttribute: "f", 
parse: function (data) { 
    return data; 
}, 
initialize: function() { 
    console.log('Intialized'); 
}, 
constructor: function (attributes, options) { 
    Backbone.Model.apply(this, arguments); 
} 
}); 

集合是这样的:

var BasicCollection = Backbone.Collection.extend({ 
    model: BasicModel, 
    url: urlCode 
}); 

var ACollection = BasicCollection.extend({ 
    parse: function (data) { 
     return data.a.b.c.d; 
    } 
}); 

var aCollection = new ACollection(); 

和看法是这样的:

var BasicView = Backbone.View.extend({ 

    tagName: 'tr', 

    template: _.template($('#basic-status-template').html()), 

    render: function() { 
     this.$el.html(this.template(this.model.attributes)); 
     return this; 
    } 

}); 

var BasicsView = Backbone.View.extend({ 

    initialize: function() { 
     this.render(); 
    }, 

}); 

这是如何收集提取看起来(其中构建的意见):

aCollection.fetch({ 
    success: function() { 

     // View 

     var aView = BasicsView.extend({ 
      el: '#foobar #table-body', 

      render: function() { 
       this.$el.html(''); 
       aCollection.each(function (model) { 
        var x = new BasicView({ 
         model: model 
        }); 
        this.$el.append(x.render().el); 
       }.bind(this)); 

       return this; 
      } 

     }); 

     var app = new aView(); 
    } 
}); 

但是现在我在尝试向视图将填充的表中添加另一个细节时遇到问题。其中一列需要来自单独网址的数据。但我仍然希望它成为同一过程的一部分。

是否有办法从两个URL的结果中形成一个集合。 (即a,b,d和e来自URL 1,c来自URL 2)?

这样我所有需要改变的就是模板,它应该都是一样的。而不必改变其他东西的负载。

谢谢。

回答

2

您有几种选择:

  1. 更新端点发送所需的数据。这是做到这一点的正确方法。收藏最好有单一端点

  2. 发送一个单独的AJAX请求获取集合之前得到来自一个URL的数据,然后在收集的parse方法将数据添加到从收藏的URL获取的响应

  3. 做这样的事情:

    $.when(collection.fetch(), collection.fetchExtraData()) 
         .done(()=> { /* create view here */ }); 
    

    fetchExtraData这里是一个自定义函数,用于发送额外的请求并正确更新与数据的集合。这样两个请求都被同时发送。您需要确保parse不会重置来自其他端点的数据。

+0

好的,谢谢。 – Kieran