2017-03-22 60 views
0

我正在嘗試生成模擬數據給我的應用程序。根據要求我的用戶可以設置的尺寸爲json。爲此,我將用戶帶到新頁面並從用戶那裏獲得價值。說small,medium,large。一旦由用戶定義的大小,我更新我收藏的url鏈接是這樣的:BackboneJS - 無法動態更新集合URL

var api = "movies"; //default. later setting by dynamic 

    var getURL = function(size){ 

     console.log('api is', api); 

     return api; 

    } 

    var Theater = { 
     Models: {}, 
     Collections: {}, 
     Views: {}, 
     Templates:{} 
    } 

    Theater.Models.Movie = Backbone.Model.extend({}); 

    Theater.Collections.Movies = Backbone.Collection.extend({ 
     model: Theater.Models.Movie, 
     urlRoot : getURL(), 
     url : function(){ 
      console.log("json from", "scripts/data/" + this.urlRoot+".json"); 
      return "scripts/data/" + this.urlRoot+".json"; //dynamic 
     }, 
     initialize: function(){ 
      console.log("Movies initialize"); 
     } 
    }); 

這裏是視圖部分:

Theater.Templates.simulator = _.template($("#tmplt-simulator").html()); 
    Theater.Views.Simulator = Backbone.View.extend({ 
     el: $("#mainContainer"), 
     events :{ 
      "click .radioBtn" : "setDataSize" 
     }, 
     template : Theater.Templates.simulator, 
     initialize: function() { 
      _.bindAll(this, 'render'); 
      this.render(); 
     }, 
     render: function() { 
      this.$el.empty(); 
      return $(this.el).append(this.template()) ; 
     }, 

     setDataSize : function(e){ 
      e.preventDefault(); 
      var size = e.target.value; 
      api = size; //updating the URL but not working when go back to home 
     } 

    }) 
從上述細節

除了這裏是全碼:full code

任何人都可以幫助我處理這種情況?

在此先感謝。

回答

2

收集並沒有真正的內置urlRoot由Backbone處理的屬性。所以你定義的是自定義屬性,只有在創建集合構造函數時纔會評估一次。

你應該做的是:

url: function(){ 
    return "scripts/data/" + getURL() + ".json"; 
    // ------------------------^ something that is actually dynamic 
}, 
+0

是的,我得到了。但是,當我在視圖之間切換時,默認的URL會恢復。如何防止URL,除非另有意義我更新? – 3gwebtrain

+0

@ 3gwebtrain我真的不明白你的問題。你在談論收集URL或瀏覽器的網址? –

+0

我在說收集URL。在我設置新的動態網址後,當我回到主頁時,該網址將重置。但我需要永久性地設置我再次改變。 – 3gwebtrain