backbone.js在render()中触发事件

时间:2013-04-12 08:21:32

标签: javascript jquery backbone.js

我在使用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,但我听说使用它不是一个好主意。

那么我该如何,或者更确切地说,何时为我的骨干视图触发启动事件?

1 个答案:

答案 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