Ember如何处理这个控制器.property()

时间:2013-03-17 17:30:08

标签: ember.js

我在网站的侧边栏区域显示Document个标题列表。为此,我在documents

上创建了App.SidebarController属性
Document = require '../models/document'

SidebarController = Ember.Controller.extend
  documents: (->
    Document.find()
  ).property()

module.exports = SidebarController

这很好用,当我在我的应用程序中创建一个新的Document时,这个侧边栏属性会自动更新,我不知道为什么。无论我在.property()函数中放什么,它都有效。 e.g。

.property('Document')
.property('App.Document')

有人可以解释一下这是如何工作的吗? property()函数要观察的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

所以你基本上说这是有效的,但你想知道为什么。

这是我的猜测:当您的控制器被渲染时,您的计算属性将首次计算并返回一个数组实例。当您创建一个新文档时,我认为这个相同的数组已更新(=添加了文档)。因此,尽管您没有在property()上指定依赖键,但它确实有效。这是因为正确的数组已经存在。正如我只是猜测,但这似乎是一个可以理解的解释。

什么是正确的做法? 恕我直言,不应该直接在计算属性中使用此类数据访问方法。相反,您应该在Route中调用此数据访问方法,然后将其分配给控制器。这样就可以确保在需要时执行find()方法。