javascript - 更改 el 属性时主干 View 事件未触发

标签 javascript backbone.js

我是 Backbone 的新手,正在尝试做一些示例,但我坚持使用这个。 我有以下 BackBone View :

CommentBoxView = Backbone.View.extend({
    initialize: function () {
        this.render();
    },
    render: function () {
        var template = _.template( $("#comment_box_template").html(), {} );
        this.el.html(template);
    },
    events: {
        "keypress textarea": "doKeyPress"
    },
    doKeyPress: function (event) {
        console.log(event);
    }
});

一切正常,但如果我更换

this.el.html(template);

有了这个:

this.el = $(template).replaceAll(this.el);

根本不会触发按键事件。 任何人都可以向我解释为什么会发生以及如何使这段代码有效吗?非常感谢大家。

最佳答案

Backbone 使用 View 的 delegateEvents绑定(bind) jQuery 的方法 delegate调用 View 的 el ,这个 delegate 是处理所有 View 事件的。如果你这样做:

this.el = $(template).replaceAll(this.el);

您丢失了绑定(bind)到 this.eldelegate,您的事件也随之消失。你也会得到你的 this.$elthis.el 不匹配,这也不好。更改 View 的 el 的正确方法是使用 setElement :

setElement view.setElement(element)

If you'd like to apply a Backbone view to a different DOM element, use setElement, which will also create the cached $el reference and move the view's delegated events from the old element to the new one.

所以你应该可以这样做:

this.setElement($(template).replaceAll(this.el));

关于javascript - 更改 el 属性时主干 View 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229719/

相关文章:

javascript - 在 D3.js 中设置标记结束箭头的颜色

javascript - 指定了集合的 URL,但返回错误

javascript - 在正文中加载脚本的顺序并使用 jquery ready

javascript - Backbone Marionette - 布局 View 僵尸

backbone.js - Backbone Collection jsonp ajax 结果没有正确生成模型

javascript - 包含带引号的无效标识符的对象的解构数组

javascript - ajax 调用后无法接收更新的 props( react )

javascript - 在同一 Controller 中使用范围变量进行 Angular 循环

javascript - HTML <col> "width"属性在不同的浏览器中产生不同的结果?

javascript - 即使包含下划线后仍然未捕获 TypeError