我可以为.ready()触发骨干事件吗?

时间:2014-01-25 01:36:02

标签: javascript jquery backbone.js

我想在视图渲染时触发骨干事件。理想情况下,我会写这样的东西:

var DetailView = Backbone.View.extend({
    id: 'detailpage',
    events: {
        'ready document': '_bringSlideDown',
        'click .close-slideDown': '_closeSlideDown'
    },

我可以在视图加载完成后创建并调用_bringSlideDown函数。这不起作用 - 是否有更好的方法来调用此事件?

具体来说,我希望事件只运行一次,这就是为什么我没有将它嵌套在render函数中。我希望视图能够多次渲染,但希望在取消绑定之前使用Backbone的.off()方法处理此事件一次。谢谢!

1 个答案:

答案 0 :(得分:2)

我想提到三点。

  1. 首先,通过最佳实践,我执行Backbone代码,直到DOM为止 准备就绪,所以如果您遵循此规则,您的骨干视图将是 在DOM准备好之后执行(因此无法监听就绪事件)。
  2. 如果你想用jQuery监听DOM添加,你应该使用 插件如:https://github.com/brandonaaron/livequery
  3. 关于您的用例,请检查渲染,而不是侦听DOM 方法if是您第一次使用渲染视图 一面旗帜。
  4. 我会做这样的事情:

    var YourView = Backbone.View.extend({
    
      _rendered : false,
    
      events : {
        'click .close-slideDown': '_closeSlideDown'
      },
    
      render: function(){
        //some render stuff
        if( !this._rendered ){
          this._rendered = true;
          this._bringSlideDown();
        } 
      }
    
    });
    

    基本上