Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js BackboneJS-无法动态更新集合URL_Backbone.js_Backbone.js Collections - Fatal编程技术网

Backbone.js BackboneJS-无法动态更新集合URL

Backbone.js BackboneJS-无法动态更新集合URL,backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,我正在尝试为我的应用程序生成模拟数据。根据要求,我的用户可以设置json的大小。为此,我将用户带到新页面,并从用户那里获得一个值。说小的,中的,大的。一旦用户定义了大小,我将更新我收藏的url链接,如下所示: var api = "movies"; //default. later setting by dynamic var getURL = function( size ){ console.log('api is', api); return

我正在尝试为我的应用程序生成模拟数据。根据要求,我的用户可以设置
json
的大小。为此,我将用户带到新页面,并从用户那里获得一个值。说
小的
中的
大的
。一旦用户定义了大小,我将更新我收藏的
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
        }

    })
除上述详细信息外,以下是完整代码:

有人帮我处理这个问题吗


提前感谢。

集合实际上没有由主干处理的内置
urlRoot
属性。因此,您要定义的是一个自定义属性,它在创建集合构造函数时只计算一次

你应该做的是:

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

集合实际上没有由主干处理的内置
urlRoot
属性。因此,您要定义的是一个自定义属性,它在创建集合构造函数时只计算一次

你应该做的是:

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

是的,我有。但是,当我在不同视图之间切换时,默认URL会返回。除非我有意更新,否则如何阻止URL?@3gwebtrain我真的不明白你的问题。你说的是集合url还是浏览器url?我说的是集合url。在我设置了新的动态URL之后,当我返回主页时,它会重置。但我需要永久设置为再次更改。@3gwebtrain您可以更新JSFIDLE来演示此问题吗?我们如何在共享提琴中重现这一点?我将为您尝试。但这在共享小提琴中并不容易。是的,我知道了。但是,当我在不同视图之间切换时,默认URL会返回。除非我有意更新,否则如何阻止URL?@3gwebtrain我真的不明白你的问题。你说的是集合url还是浏览器url?我说的是集合url。在我设置了新的动态URL之后,当我返回主页时,它会重置。但我需要永久设置为再次更改。@3gwebtrain您可以更新JSFIDLE来演示此问题吗?我们如何在共享提琴中重现这一点?我将为您尝试。但这在共享小提琴中并不容易做到。