2017-09-12 23 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