我在使用backbone.js的render
函数中的某些事件,更具体地说是click
,但是,我无法让它工作。
我有类似(但非常简化)的设置:
App.ProductView = Backbone.View.extend({
className: 'title_products_tab',
el: $('.title_products_tab'),
events: {
'click .product_list .edit_product' : 'edit',
对于我的骨干视图的事件部分。在渲染函数中,我希望触发绑定的.edit_product
click
事件:
render: function(){
console.log($._data( $('.title_products_tab .product_list .edit_product')[0], "events" ));
$('.title_products_tab .product_list .edit_product').trigger('click');
哪个不起作用,元素的_data
未定义,但是,我知道事件确实有效,因为我的视图的其余部分相应地起作用。我似乎无法在render
或启动时的任何其他位置触发事件。
我想:
this.trigger('click .product_list .edit_product');
然而,再次没有运气。
我也听说过bindAll
,但我听说使用它不是一个好主意。
那么我该如何,或者更确切地说,何时为我的骨干视图触发启动事件?
答案 0 :(得分:2)
所以你可能会觉得这很有趣(注:Backbone的代码):
var View = Backbone.View = function(options) {
this.cid = _.uniqueId('view');
this._configure(options || {});
this._ensureElement();
this.initialize.apply(this, arguments);
this.delegateEvents();
};
特别是最后一部分。在调用initialize方法之后绑定事件,因此在调用render方法之后。事件尚未受约束。
(如果您确实需要按照自己的方式进行操作,我猜您可以手动调用delegateEvents
)