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 实例化集合主干_Backbone.js - Fatal编程技术网

Backbone.js 实例化集合主干

Backbone.js 实例化集合主干,backbone.js,Backbone.js,我有一个router类,它实际上对视图和集合有单独的哈希,如下所述。在视图呈现方法中获取实例时,如何设置集合的url参数 路由器类 Router = (function() { 'use strict'; var viewHash = {},collectionsHash = {}, EvtCalRouter, startRouter; // Set up the Backbone Router. // Ev

我有一个router类,它实际上对视图和集合有单独的哈希,如下所述。在视图呈现方法中获取实例时,如何设置集合的url参数

路由器类

Router = (function() {
      'use strict';

      var
        viewHash = {},collectionsHash = {},
        EvtCalRouter, startRouter;

        // Set up the Backbone Router.
      // Evaluates URL with parameters and maps them to functions contained within the Router.
      // This enables us to do things like allow users to bookmark search results.
      // See "http://backbonejs.org/#Router" for more info.
      EvtCalRouter = Backbone.Router.extend({

        // Define the Routes we care about.
        // See "http://backbonejs.org/#Router-routes" for more info.
        routes : {
          ""       : "home",  
          "route1" : "route1"
       }
 buildSearchScreen : function() {
collectionsHash['events'] = ESPN.apps.ADTG.EC.EventsCollection.newInstance({
        });

    },
startRouter = function() {
    new EvtCalRouter();
    Backbone.history.start();
     };

    // Start routing functionality
  $(document).ready(startRouter);

  // For any module that needs to know...
  $(document).ready( function() {
    $(document).trigger( ESPN.apps.ADTG.EC.events.ecInit );
  });

  //-------------------------------------------------------------------------------------------------------------------
  // Public API
  //-------------------------------------------------------------------------------------------------------------------

  return {
getCollection : function(name){return collectionsHash[name]||{};}
          };

})();
收藏课在这里

    The Collection Class is defined like this

      The Collection Class

        Collection = (function(){

        var Events;

        Events = Backbone.Collection.extend({

              initialize: function(props){
              this.url = props.url;
              alert(this.url);
            }
        });

        return {
            newInstance : function(options) { return new Events(options); }
        };
    })();
当我获取url时,如何设置集合的url参数 视图渲染方法中的实例

您应该能够在选项哈希中传递url:

Collection.newInstance({url: "your url"});
但是

要初始化集合,需要传递一个模型数组,因此需要更改集合定义:

Collection = (function(){

  var Events;

  Events = Backbone.Collection.extend({

    initialize: function(models, options){
      this.url = options.url;
      alert(this.url);
    }
  });

  return {
    newInstance : function(models, options) { return new Events(models, options); }
  };
})();
但是,我不确定您为什么要为您的收藏创建动态url。:/ 您可能想定义集合用于哪个模型……但是,您也可以通过选项传递它

Collection.newInstance([
  //array of models...
], {
  url: "meh"
});
编辑:

如果您需要动态url,但大部分仍然相同,则可以将url定义为函数:

Events = Backbone.Collection.extend({
  url: function(urlOptions) {
    return 'yourDomain/resources?'+ urlOptions; // just return the url as a string
  }
});
jsfiddle示例:


jsfiddle.net/sbjaz/13

我想动态设置url,因为我在页面左侧有继承权,单击其中的每一个将检索同一集合的单独数据集。然后您可以将url定义为集合中的函数。如果你的url大部分是相同的。如果它们不是,并且它们指向不同的控制器,那么您真正需要做的是。。。定义不同的集合。请参阅我答案中最后添加的部分。我做了var eventscolection=ESPN.apps.ADTG.EC.Router.getCollection('events');eventsCollection.url(');我收到一个错误eventsCollection.url不是一个函数。看到了吗?你能发布你是如何定义url函数的吗?