2017-03-22 44 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