Javascript 如何在主干中初始化函数后将事件绑定到DOM?
我有一个主干视图,它将一个操作绑定到DOM中的一个元素。问题是调用事件时没有呈现DOM元素。我的代码如下所示:Javascript 如何在主干中初始化函数后将事件绑定到DOM?,javascript,backbone.js,Javascript,Backbone.js,我有一个主干视图,它将一个操作绑定到DOM中的一个元素。问题是调用事件时没有呈现DOM元素。我的代码如下所示: // Change the focus to a full goal view var GoalFullView = Backbone.View.extend({ // Bind the goal full view el: $("#main"), // Events for making changes to the goal events
// Change the focus to a full goal view
var GoalFullView = Backbone.View.extend({
// Bind the goal full view
el: $("#main"),
// Events for making changes to the goal
events: {
"keypress #goal-update": "createOnEnter",
},
// Cache the template for the goal full view
template: _.template($("#goal-full-template").html()),
// Render the goal full and all of its goal updates
initialize: function() {
this.render();
this.collection = new GoalUpdateList;
this.collection.bind('add', this.addOne, this);
this.collection.bind('reset', this.addAll, this);
this.collection.fetch();
},
如您所见,事件绑定发生在初始化之前,因此它无法定位DOM元素,因为它尚未呈现。如何将事件绑定延迟到初始化之后
编辑1:
嗯,我做了一个控制台日志,它在一个按键上打印出一些东西,但我在我的Chrome开发者控制台中得到了这样的信息:
Uncaught TypeError: Cannot call method 'apply' of undefined
这意味着什么?正如我所料,问题出在另一个地方 DOM
事件
绑定声明可以在DOM元素real存在之前完成
我认为这个代码示例再现了您正在谈论的情况,并且DOM事件仍然正确绑定
var View = Backbone.View.extend({
events: {
"click #link": "click"
},
click: function(){
console.log( "click event" );
},
render: function(){
this.$el.html( "<a href='#' id='link' onclick='return false'>link</a>" );
}
});
new View({ el: "body" }).render();
var-View=Backbone.View.extend({
活动:{
“单击链接”:“单击”
},
单击:函数(){
console.log(“单击事件”);
},
render:function(){
这是。$el.html(“”);
}
});
新视图({el:“body”}).render();
检查仅绑定初始化函数中的事件。或者使用委托。也就是说,将事件绑定到父元素,并在事件回调中测试哪个元素触发了事件。我想我一直在使用这种方法,我没有任何问题。。让我检查一下。我不记得名为“按键”的事件,但我记得“按键”。这可能是问题所在吗?(顺便说一句,我喜欢你的用户名:)我用我得到的错误更新了主体。这是可行的,但我遇到了与帖子中描述的完全相同的问题,我希望这是可行的。如果我在initialize方法中声明this.el
,这无关紧要。