命名空间我的骨干模型

时间:2012-07-22 10:09:18

标签: javascript backbone.js

我目前列出了这样的模型:

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

我对骨干很新,我不确定我是否按照正确的顺序做事,当我尝试做我的filterType和Trigger时,我的收藏品不存在事情完全错了。

我的代码可在此处查看,http://dan.ms/backbone

任何指针都感激不尽。

1 个答案:

答案 0 :(得分:0)

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