Backbone.js 视图是不是需要 jQuery 或 Zepto? (或者:为啥我会收到“未捕获的类型错误:未定义不是函数”?)
Posted
技术标签:
【中文标题】Backbone.js 视图是不是需要 jQuery 或 Zepto? (或者:为啥我会收到“未捕获的类型错误:未定义不是函数”?)【英文标题】: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.Model
和Backbone.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
。
-
是否需要 jQuery 或 Zepto?
我能否通过在对
Backbone.View.extend
的调用中覆盖view.make
来消除这种依赖关系?
【问题讨论】:
【参考方案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 使用控制器概念将数据模型与元素绑定。
【讨论】:
以上是关于Backbone.js 视图是不是需要 jQuery 或 Zepto? (或者:为啥我会收到“未捕获的类型错误:未定义不是函数”?)的主要内容,如果未能解决你的问题,请参考以下文章