Javascript 使用jQuery触发视图事件

Javascript 使用jQuery触发视图事件,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个简单事件的主干视图: Backbone.View.extend({ events: { "change #id": "idChanged" }, idChanged: function () {} initialize: function () { /* construct HTML */ $("#id").trigger("change"); } }); 但是,这不会触发idChanged事件。

我有一个简单事件的主干视图:

Backbone.View.extend({
    events: {
        "change #id": "idChanged"
    },
    idChanged: function () {}
    initialize: function () {
        /* construct HTML */

        $("#id").trigger("change");
    }
});
但是,这不会触发
idChanged
事件。当我用浏览器更改
#id
时,它会触发。如何触发主干视图事件?

您使用了“扩展”。 相同的代码应该应用于Backbone.view.Object({….}) 指定要触发事件的对象

Backbone.View.Ojbect(
  {
    events: function () {

    "change #id": "idChanged"
    },

idChanged: funciton () {}

initialize: function () {
    /* construct HTML */
    $("#id").trigger("change");
}
}
);

也就是说,尽量不要扩展。

这是因为
事件
哈希将在呈现视图时绑定到视图,这是在
初始化
代码运行之后发生的。尝试直接调用所需的回调:

Backbone.View.extend({
    events: function () {
        "change #id": "idChanged"
    },
    idChanged: function () {}
    initialize: function () {
        /* construct HTML */

        this.idChanged();
    }
});

你的代码中有一些东西

1我认为您对事件的定义不正确

它应该是散列或返回散列的函数,如下所示:

events: {
    "change #id": "idChanged"
}
2一些拼写错误,如“函数”和缺少逗号

然后,要使事件工作,定义的#id元素必须位于视图的
el
中。如果元素在视图之外,它将无法工作

此外,您不能在initialize中触发该操作,因为在执行该函数之前,视图尚未完全初始化。:)

下面是一个工作示例:


您是说在使用浏览器时会触发事件,但通过
初始化
方法它不会触发如果
#id
元素是视图的一部分,则只有在呈现视图时,它才会在初始化时不存在。谢谢,这很有帮助。
函数()
只是我的一个输入错误;我已经改正了。我需要能够在视图中触发事件;在
initialize
之后是否有调用我可以使用的东西?因为您无论如何都需要渲染视图……您可以在render中执行:这是一个很好的建议,但现在事件数据不在我需要的
idChanged
方法中(特别是
e.target
用于
#id
元素和可能的其他内容)