Javascript 主干js根据从多个URL返回的结果构建集合';s

Javascript 主干js根据从多个URL返回的结果构建集合';s,javascript,backbone.js,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'); }, constr

我有一个这样的模型:

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();
   },

});
像这样的收藏:

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();
   },

});
还有这样的观点:

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();
   },

});
这是集合获取的外观(构建视图):

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

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

这样,我所需要更改的只是模板,它的工作原理应该是一样的。而不是不得不改变其他的东西负载以及

谢谢。

您几乎没有选择:

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

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

  • 做一些类似于:

    $.when(collection.fetch(), collection.fetchExtraData())
          .done(()=> { /* create view here */ });
    
    fetchExtraData
    这里有一个自定义函数,可以发送额外的请求并使用数据正确更新集合。这样,两个请求将同时发送。您需要确保
    parse
    不会重置来自其他端点的数据

  • 您几乎没有选择:

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

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

  • 做一些类似于:

    $.when(collection.fetch(), collection.fetchExtraData())
          .done(()=> { /* create view here */ });
    
    fetchExtraData
    这里有一个自定义函数,可以发送额外的请求并使用数据正确更新集合。这样,两个请求将同时发送。您需要确保
    parse
    不会重置来自其他端点的数据