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