我创建了一个简单的主干页面,它从服务器获取一些设置(JSON)并将它们插入表中(每行都是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");
}
});
但它不会触发事件,当我在onfocus="alert()"
标记中使用内联input
时,同样的事件也会起作用。
我创建了一个小提琴 here
答案 0 :(得分:1)
那是因为这里:
$('.container').html($(settingsView.render().el).html());
您正在使用View的元素的HTML内容。您应该附加View的元素本身。
$('.container').append(settingsView.render().el);
这是因为Backbone使用事件委托语法来绑定视图事件处理程序。由于您要附加View的内容的html表示,因此附加的元素不是View元素的后代,因此事件不会传播到View的元素。 / p>