Backbone js从多个URL返回的结果构建集合

时间:2017-09-12 12:01:46

标签: javascript backbone.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的数据。但我仍然希望它成为同一过程的一部分。

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

这样我需要改变的只是模板,它应该都是一样的。而不是必须改变其他东西的负荷。

感谢。

1 个答案:

答案 0 :(得分:2)

你几乎没有选择:

  1. 更新端点以发送所需数据。这是正确的方法。理想情况下,集合应该具有单一端点

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

  3. 做类似的事情:

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

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