2013-11-27 45 views
0

我有一个路由器类,它实际上为视图和集合提供了单独的哈希,如下所述。当我在视图渲染方法中使用实例时,如何设置集合的url参数。实例化集合主干

Router类

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); } 
     }; 
    })(); 

回答

1

如何设置收藏的URL参数,当我走 例如在视图渲染方法。

您应该能够传递一个网址,你的选择哈希:

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

BUT。

要初始化集合,你需要传递的模式阵列,所以你需要改变您的收藏确定指标:

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); } 
    }; 
})(); 

我不知道为什么你想为你的收藏动态网址虽然。 :/ 并且您可能想要定义该集合适用于哪种模型......但是,您也可以通过选项来传递它。

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

+0

我想动态地设置网址,因为我在网页左侧点击水印,点击它们中的每一个将检索同一个集合的单独数据集。 – Vinay

+1

然后你可以在你的集合中定义url作为一个函数。如果你的url的大部分是相同的。如果他们不是,他们指向不同的控制器,你真正需要做的是...定义不同的集合。查看我答案中最后添加的部分。 –

+0

我做了var eventsCollection = ESPN.apps.ADTG.EC.Router.getCollection('events'); ''; http:// localhost:8080/adtglobal/2.0/api/events?startDate = 2013-11-05T00:00:00-0400&endDate = 2013-11-06T00:00:00-0400');我得到一个错误eventsCollection.url不是一个函数。 – Vinay