2

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

然而最近我在骨干网读到了关于delegateEvents我如何实现的复杂感觉。到目前为止,我到处都在方法中调用render()方法initialize

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

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

父母是否指示孩子在哪里以及何时呈现自己 r 是否仍在 SoC 的范围内(关注点分离)?

4

2 回答 2

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我也没有看到调用 inside 的任何问题。填充不应该对其功能产生任何影响。initializedelegateEventsel

调用 insiderenderinitialize一种很好的做法,因为它在任何情况下都可以工作,并且统一了您的渲染方式(您将添加在获取后渲染的视图,其方式与其他视图相同)。以这种方式渲染我还没有遇到任何问题,显然你也没有!

希望这会有所帮助(或有助于让您放心)!

于 2012-09-04T13:01:07.220 回答
1

“......很久以前,我有点相信自己 render() 是视图本身的特权,而不是父视图的关注。”

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

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

于 2012-09-04T15:47:59.413 回答