Ember.js - ArrayController和CollectionView的区别

4

ArrayController和CollectionView在使用模板渲染“content”数组方面具有相同的功能,唯一不同之处在于收藏视图具有“append…”方法,可以将其附加到DOM中的任何位置。我说得对吗?还有其他的区别吗?哪个更有用?

2个回答

19
一个ArrayController只是Ember.ArrayProxy的扩展。它提供了一个与其内容数组一起工作的接口。它处理将数组变异通知分派给任何观察者。它不处理DOM相关的任何事情,完全与事件或视图层隔离。
CollectionView是一个视图(这意味着它操作DOM并处理事件),它使用ArrayController(或任何符合Ember.Array期望的内容)并反映其内容为Ember.Views。它侦听由ArrayController发出的变异事件,并更新以匹配。它通过专门侦听arrayDidChange消息来工作。如果没有来自其内容的那些消息,它就不知道要创建还是销毁其视图。
当您使用{{#each YourApp.yourArrayController}}助手时,实际上是实例化一个以控制器为其内容的Ember.CollectionView。

1

ArrayController是一个控制器。CollectionView是一个视图。这是一个非常基本的概念上的区别。理论上,ArrayController需要一个视图来使用模板渲染数组。这就是为什么视图有追加方法而控制器没有的原因。


@pjmorse:感谢您回答这个愚蠢的问题。我错误地选择了Ember.js来理解概念,但是从SproutCore开始理解核心概念真的很好。现在我理解得更好了。 - Manoharan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接