骨干事件哈希取决于渲染期间创建的数据

时间:2016-02-08 19:50:49

标签: backbone.js backbone-views backbone-events jquery-events

我有一个Backbone视图,其render方法创建并缓存一些JavaScript对象,然后将它们呈现给DOM中的SVG节点。所以(非常简单化),我正在做这样的事情:

render: function() {
  // Create objects and cache them to the view...
  this.someObjects = [obj1, obj2, ...];
  // Render objects...
  this.someObjects.forEach(function(obj) {
    obj.render(); // Each object knows how to render itself...
  })
  return this;
}

我的视图事件哈希是从函数返回的,并包含事件处理程序,它关闭某些变量,这些变量依赖于渲染时缓存的对象。所以(再简单地说,仅仅是为了说明目的),我正在做这样的事情:

events: function() {
  var getRenderedObjects = function() {
    return this.someObjects;
  };
  var renderedObjects = getRenderedObjects();

  return {
    'click #someDiv .someClass' : function() {
      console.log(renderedObjects);
    }
  }
}

问题是Backbone在视图初始化函数运行之前设置了事件哈希的绑定,这是我需要进行显式渲染的地方。因此this.someObjects将是undefined。在移动到Backbone之前,所有我的事件处理程序都是在渲染视图后定义和绑定的,无论如何这似乎很自然。我找到了一个解决方法,即在初始化后,在渲染后手动设置事件哈希,然后调用delegateEvents()以确保它们被绑定。虽然我发现在处理程序this中不再引用视图对象,而是再次引用全局窗口对象,但这是有效的。然而,这一切看起来都很麻烦,而且有点骇人听闻。

我想我可以renderedObjects留给null并在需要它的处理程序中有条件地设置它(所以如果它没有设置,设置它,否则什么都不做) 。但这看起来很难看。还有更好的方法吗?

0 个答案:

没有答案