Backbone 查看活动无效
Backbone View events not working
我创建了一个简单的 backbone 页面,它从服务器获取一些设置 (JSON) 并将它们插入 table(每行是一个 settingModel
实例)。
现在我想使用事件来更改模型的属性,当用户更改它们并将设置与服务器同步时。
我为模型视图使用了以下代码:
app.settingView = Backbone.View.extend ({ // View for Model
tagName: 'tr',
template: _.template( $('#setting-template').html() ),
events: {
'focus input':'showAlert'
},
render: function () {
var modelData = this.model.toJSON();
var settingTemplate = this.template(modelData);
this.$el.html(settingTemplate);
return this;
},
showAlert: function(){
alert("You Are Editing");
}
});
但它不会触发事件,当我在我的 input
标签中使用内联 onfocus="alert()"
时,同样的事件有效。
我创建了一个fiddlehere
那是因为这里:
$('.container').html($(settingsView.render().el).html());
您正在使用视图元素的 HTML 内容。您应该附加视图的 元素 本身。
$('.container').append(settingsView.render().el);
这是因为 Backbone 使用事件委托语法来绑定视图事件处理程序。由于您附加的是视图内容的 html 表示,因此附加的元素不是视图元素的后代,因此事件不会传播到视图元素。
我创建了一个简单的 backbone 页面,它从服务器获取一些设置 (JSON) 并将它们插入 table(每行是一个 settingModel
实例)。
现在我想使用事件来更改模型的属性,当用户更改它们并将设置与服务器同步时。
我为模型视图使用了以下代码:
app.settingView = Backbone.View.extend ({ // View for Model
tagName: 'tr',
template: _.template( $('#setting-template').html() ),
events: {
'focus input':'showAlert'
},
render: function () {
var modelData = this.model.toJSON();
var settingTemplate = this.template(modelData);
this.$el.html(settingTemplate);
return this;
},
showAlert: function(){
alert("You Are Editing");
}
});
但它不会触发事件,当我在我的 input
标签中使用内联 onfocus="alert()"
时,同样的事件有效。
我创建了一个fiddlehere
那是因为这里:
$('.container').html($(settingsView.render().el).html());
您正在使用视图元素的 HTML 内容。您应该附加视图的 元素 本身。
$('.container').append(settingsView.render().el);
这是因为 Backbone 使用事件委托语法来绑定视图事件处理程序。由于您附加的是视图内容的 html 表示,因此附加的元素不是视图元素的后代,因此事件不会传播到视图元素。