Backbone.js 视图需要 jQuery 或 Zepto 吗? (或者:为什么我会收到“未捕获的类型错误:未定义不是函数”?)

发布于 2024-11-24 01:35:41 字数 1127 浏览 2 评论 0原文

我刚刚开始使用 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 中) :未捕获类型错误:未定义不是函数。它将这个错误追溯到 Backbone.js 中的函数 f.extend.make

Backbone.js 关于 view.make 的文档说:

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

  1. 它需要 jQuery 或 Zepto 吗?
  2. 我可以通过在调用 Backbone.View.extend 时覆盖 view.make 来删除此依赖项吗?

I’m just starting out with Backbone.js. I’ve subclassed Backbone.Model and 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;
    }
});

I’ve then attempted to create an instance of each:

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

The last line line causes an error (in Chrome 12): Uncaught TypeError: undefined is not a function. It traces this error back to the function f.extend.make in Backbone.js.

The Backbone.js documentation on view.make says:

Convenience function for creating a DOM element of the given type (tagName), with optional attributes and HTML content. Used internally to create the initial view.el.

  1. Does it require jQuery or Zepto?
  2. Could I remove this dependency by overriding view.make in my call to Backbone.View.extend?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

々眼睛长脚气 2024-12-01 01:35:42

1)文档说明它需要

jQuery (> 1.4.2) 或 Zepto。

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

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

1) The documentation states that it requires

either jQuery ( > 1.4.2) or Zepto.

2) The View Component is tightly coupled to the jQuery/Zepto API. You could reimplement it, but if you use backbone.js extensively, you will reimplement the whole interface.

But maybe it works with your small use-case, but becuase of the tight coupling I would not guarantee that it works.

扛刀软妹 2024-12-01 01:35:42

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

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

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

要了解更多关于此处的评论

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

You also can use the Spine.js instead backbone.

It's also compatible with JQuery and Zepto, but isn't needed to templating.

Spine.js don't need underscore too, but you can add as plugin if you need.

To know more about a good review here.

Spine.js uses the controller concept to bind data model with elements.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文