【问题标题】:Do Backbone.js views require jQuery or Zepto? (Or: why am I getting “Uncaught TypeError: undefined is not a function”?)Backbone.js 视图是否需要 jQuery 或 Zepto? (或者:为什么我会收到“未捕获的类型错误:未定义不是函数”?)
【发布时间】:2011-10-07 03:03:14
【问题描述】:

我刚刚开始使用 Backbone.js。我对Backbone.ModelBackbone.View 进行了子类化:

var Message = Backbone.Model.extend();

var MessageView = Backbone.View.extend({
    tagName: 'div',
    className: 'message',
    template: _.template('{{ html }}'),

    render: function(){
        this.template({
            html: this.model.html
        });
        this.el.className.append(' ' + this.model.type);

        return this;
    }
});

然后我尝试为每个创建一个实例:

var message = new Message({html: html, type: type});
var messageView = new MessageView({model: message});

最后一行导致错误(在 Chrome 12 中):Uncaught TypeError: undefined is not a function。它将这个错误追溯到 Backbone.js 中的函数f.extend.make

Backbone.js documentation on view.make 说:

用于创建具有可选属性和 HTML 内容的给定类型 (tagName) 的 DOM 元素的便捷函数。在内部用于创建初始 view.el

  1. 是否需要 jQuery 或 Zepto?
  2. 我能否通过在对Backbone.View.extend 的调用中覆盖view.make 来消除这种依赖关系?

【问题讨论】:

    标签: javascript jquery backbone.js zepto


    【解决方案1】:

    1) 文档说明它需要

    jQuery (> 1.4.2) 或 Zepto。

    2) 视图组件与 jQuery/Zepto API 紧密耦合。您可以重新实现它,但如果您广泛使用backbone.js,您将重新实现整个界面。

    但也许它适用于您的小用例,但由于紧密耦合,我不能保证它有效。

    【讨论】:

    • re 1) — 哦,是的!就在上面,抱歉。
    【解决方案2】:

    您也可以使用Spine.js 代替主干。

    它也与 JQuery 和 Zepto 兼容,但不需要模板。

    Spine.js 也不需要下划线,但您可以根据需要添加为插件。

    了解更多关于一个好的review here

    Spine.js 使用控制器概念将数据模型与元素绑定。

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2014-12-13
      相关资源
      最近更新 更多