在骨干视图中调用render()方法的好方法

时间:2012-09-04 12:13:52

标签: javascript backbone.js

很久以前我有点确信render()是观点本身的特权,而不是父母观点的关注。

但是最近我读到了骨干网中的delegateEvents并且对我的实施情况感到好奇。到目前为止,我在render()方法中调用initialize方法。

我没有进行详尽的测试,也没有找到可能遇到问题的用例。然而,它让我感觉潜在的问题潜伏在我的方式。

您能分享一下您的经历吗?在render()内调用initialize方法有什么问题?你会怎么做?

父母是否规定孩子在哪里以及什么时候自我呈现r是否仍然在SoC的范围内(关注点分离)?

2 个答案:

答案 0 :(得分:1)

基本上我看到有3种不同的场景用于渲染前2个是渲染内部父级,

// parent view's render
render: function() {
  var child = new ChildView({el: this.$('.foo'), model: bar, ...});
  this.$el.append(child.render().el);
}

这基本上是父母指示孩子在何处或何时被渲染,以及在其内部渲染的情况

// parent view's render
render: function() {
  var child = new ChildView({el: this.$('.foo'), model: bar, ...});
  this.$el.append(child.el);
}

// child view's initialize
initialize: function() {
  ...
  this.render();
}

这是子视图指示何时完成渲染的情况。我的观点是后者更好。应该安排您的应用程序,以便只有视图本身知道何时应该呈现它(如果它在初始化或获取模型/集合之后是正确的)。我在render内调用initialize时未发现任何问题,即使在delegateEvents之后调用el。填充render不应该对它的运作方式产生任何影响。

initialize内调用{{1}}是一种很好的做法,因为无论情况如何都可以正常工作并统一渲染方式(您将添加与其他视图相同方式后呈现的视图)。我还没有遇到任何问题这样做,显然你也没有!

希望这有助于(或有助于向您保证)!

答案 1 :(得分:1)

“......很长一段时间以来,我有点确信,渲染()是观点本身的特权,而不是父母的观点。”

你走在正确的轨道上。虽然人们经常将render视为公共方法,但您会发现从视图外部调用渲染只会导致意大利面条代码和混乱。

最佳做法是渲染(或安排渲染)作为初始化的一部分,并响应相关模型上的相应事件。