javascript - 命名空间我的 Backbone 模型

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

我对 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/

相关文章:

javascript - 在页面上实现不同的 CSS

backbone.js - 无法循环 Backbone 集合

javascript - 可以将 GWT 与基于 javascript 的框架进行比较吗?

backbone.js - 使用collection.url的BackboneJS model.url

javascript - Backbone.js 共享上下文模型

javascript - .apply 到底是做什么的?

javascript - 为什么按下提交按钮后会发生 Bootstrap 表单验证?

javascript - Backbone.js:用不同的数据更新集合

javascript - 使用 vue.js 和 moment.js 创建倒计时

JavaScript - 排序选择选项