2013-03-17 86 views
0

我在网站的侧边栏区域显示Document标题的列表。要做到这一点我创建了一个documents财产上的App.SidebarControllerEmber如何处理此控制器.property()

Document = require '../models/document' 

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

module.exports = SidebarController 

这工作得很好,当我在我的应用程序创建一个新的Document,这个侧边栏属性获取的自动更新,我不知道为什么。无论我放在.property()函数中,它都能正常工作。例如

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

有人可以解释这是如何工作的? property()函数可以观察什么是正确的事情?

回答

2

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

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

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

+0

这很有道理,谢谢你的答案!我同意为控制器设置路由设置数据,问题是我的侧栏不是路由,它只是通过在应用程序模板中的{{render'sidebar}}调用的 - 所以我只使用一个'controller' /'view'。我不知道如何触发从侧边栏直接到'/#/ documents'(设置文档的路径)时发生的所有事情。 – Lsdafjklsd 2013-03-17 19:26:04

+1

@mavilein对于事情是如何/为什么是正确的,数据访问方法应该在路线中是正确的。由于您正在从应用程序模板调用'{{render}}',因此请使用ApplicationRoute.setupController()'hook来设置。 – 2013-03-18 15:28:04