过去几天我一直在努力让事件发生,所以我将应用程序剥离回基础知识,我仍然在解决触发事件不起作用的问题。
骨干中的其他所有内容都很有效,除此之外我希望有人可以提供帮助。
目前在我看来
define([
'jquery',
'underscore',
'backbone',
'models/SpecificationModel',
'collections/SpecificationCollection',
'text!templates/specification/specificationlisttemplate.html'
], function($, _, Backbone, specModel, specCollection, specTemplate){
var Specifications = Backbone.View.extend({
events: {
'click a.btn': 'showAlert'
},
showAlert: function() {
alert('fired');
},
initialize:function() {
_.bindAll(this, 'render');
var self = this;
this.collection = new specCollection();
this.collection.fetch({
success: function () {
self.render();
}
});
},
render: function(){
var data = {
specs: this.collection.toJSON()
};
var compiledTemplate = _.template(specTemplate);
$("#backBoneContent").html(compiledTemplate(data));
}
});
return Specifications;
});
HTML
<div id="backBoneContent">
//
<tr>
<td>
<a href="#review/1" class="btn">View </a>
</td>
</tr>
<td>
<a href="#review/2" class="btn>View </a>
</td>
</tr>
//
</div>
答案 0 :(得分:3)
您没有指定Backbone应附加视图 1 的任何el
,因此无法委派事件且事件永远不会触发。
根据经验,永远不要在视图中直接使用jQuery对象,使用this.$el
或this.$
并将容器作为选项传递给您的视图:
在您的路由器中,
var specsView = new SpecsView({el: "#backBoneContent"});
在你看来
render: function() {
...
this.$el.html(compiledTemplate(data));
}
1 请注意,访问$("#backBoneContent")
对于Backbone没有特殊意义,它只是一个jQuery对象。