2013-11-27 101 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