很久以前我有点确信render()
是观点本身的特权,而不是父母观点的关注。
但是最近我读到了骨干网中的delegateEvents
并且对我的实施情况感到好奇。到目前为止,我在render()
方法中调用initialize
方法。
我没有进行详尽的测试,也没有找到可能遇到问题的用例。然而,它让我感觉潜在的问题潜伏在我的方式。
您能分享一下您的经历吗?在render()
内调用initialize
方法有什么问题?你会怎么做?
父母是否规定孩子在哪里以及什么时候自我呈现r是否仍然在SoC的范围内(关注点分离)?
答案 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
视为公共方法,但您会发现从视图外部调用渲染只会导致意大利面条代码和混乱。
最佳做法是渲染(或安排渲染)作为初始化的一部分,并响应相关模型上的相应事件。