【问题标题】:backbone.js trigger events in render()在 render() 中的主干.js 触发事件
【发布时间】:2013-04-12 08:21:31
【问题描述】:

我正在绑定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_productclick事件:

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

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

【问题讨论】:

  • 你什么时候调用你的渲染方法?在初始化方法中?
  • @Loamhoof 确实,在 init 方法中

标签: javascript jquery backbone.js


【解决方案1】:

所以你可能会觉得这很有趣(注意:Backbone 的代码):

var View = Backbone.View = function(options) {
  this.cid = _.uniqueId('view');
  this._configure(options || {});
  this._ensureElement();
  this.initialize.apply(this, arguments);
  this.delegateEvents();
};

尤其是最后一部分。事件是在调用初始化方法之后绑定的,所以在调用你的渲染方法之后。活动尚未绑定。

(如果您确实需要按您的方式进行操作,我想您可以手动调用delegateEvents

【讨论】:

  • 好吧,我想您可以简单地自己调用该方法:this.edit()。将一行代码更改为另一行,这似乎不是一件坏事;)
  • 这是一个好主意,尽管它附加到产品列表中,如果该列表的大小为 1,我会为用户选择该列表的唯一条目,通过内部编码以可编程方式进行操作不会很好为了我;我目前正在使用主干作为一种手段来标准化已经存在的表单的前端;啊,我就做代理,谢谢:)
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多