我目前这样设置我的模型:
var Contact = Backbone.Model.extend({
defaults: {
photo: "img/placeholder.png",
name: "",
address: "",
tel: "",
email: "",
type: ""
}
});
我的收藏是这样的:
var Directory = Backbone.Collection.extend({
model: Contact
});
然后在我的主 app.js 文件中,我这样做是为了定义我的路线:
var AppRouter = Backbone.Router.extend({
initialize:function () {
$('#header').html(new HeaderView().render().el);
},
routes: {
"filter/:type": "urlFilter"
},
urlFilter: function (type) {
directory.filterType = type;
directory.trigger("change:filterType");
},
});
下面的代码出现错误,告诉我“目录”未定义。
directory.filterType = type;
directory.trigger("change:filterType");
在我看来,我像这样新建了集合,this.collection = new Directory(contacts);
我对 Backbone 还很陌生,我不确定我是否按正确的顺序做事,并且当我尝试执行filterType和Trigger时,我的集合不存在,或者我是否事情完全错误。
我的代码可以在这里查看,http://dan.ms/backbone
非常感谢您的指点。
最佳答案
directory
变量似乎是在对 tpl.loadTemplates
的回调中创建的。该变量在路由器内部访问的范围内不可用。一种方法是将 directory
作为参数传递给 AppRouter
构造函数。在 AppRouter
的构造函数中,将其保存为属性,并通过当前实例在 urlFilter
方法中访问它。
var AppRouter = Backbone.Router.extend({
initialize: function (options) {
this.directory = options.directory;
},
urlFilter: function (type) {
this.directory.set("filterType", type);
}
});
// Initialize with:
var directory = new DirectoryView;
var app = new AppRouter({ directory: directory });
Backbone.history.start();
关于javascript - 命名空间我的 Backbone 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11599377/