Ember.js - ArrayController 和 CollectionView 之间的区别

Posted

技术标签:

【中文标题】Ember.js - ArrayController 和 CollectionView 之间的区别【英文标题】:Ember.js - Diff between ArrayController and CollectionView 【发布时间】:2012-05-13 22:40:30 【问题描述】:

ArrayController 和 CollectionView 都具有使用模板渲染“内容”数组的相同功能,只是集合视图具有“附加..”方法可以附加到 DOM 中的任何位置。我对吗?还有其他区别吗?哪个更有用?

【问题讨论】:

【参考方案1】:

ArrayController 只是 Ember.ArrayProxy 的扩展。它提供了一个将数组集作为其内容的接口。它处理向任何观察者发送数组突变通知。它不处理与 DOM 相关的任何事情,并且与事件或视图层完全隔离。

CollectionView 是一个视图(这意味着它操作 DOM 并处理事件),它接受一个 ArrayController(或任何满足 Ember.Array 期望的东西)并将其内容反映为 Ember.Views。它监听 ArrayController 发出的突变事件,并更新自身以匹配。它通过专门监听 arrayDidChange 消息来工作。如果没有来自其内容的这些消息,它就不会知道创建或销毁其视图。

当您使用 #each YourApp.yourArrayController 帮助器时,您实际上是在实例化一个 Ember.CollectionView,它将控制器作为其内容。

【讨论】:

【参考方案2】:

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

【讨论】:

@ pjmorse:感谢您回答这个愚蠢的问题。我错误地从 Ember.js 开始理解概念,但从 SproutCore 开始理解核心概念真的很好。现在我明白了很多。

以上是关于Ember.js - ArrayController 和 CollectionView 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Ember.js - 将 ember-cli-mirage 用于假模型时未找到模型

Ember.js 和 RequireJS

Ember.js 中的视图与组件

toastr 和 ember.js

Ember.js 和玩!框架身份验证最佳实践

Ember.js:Handlebars 不显示任何内容