我的控制器中有以下道具
App.TeamController = Ember.ObjectController.extend(
involvedProjectTeams: (->
return @get("content.projectTeams").filter (projectTeam, index, enumerable) ->
projectTeam.get("sdeScopingWeeks") isnt 0
).property("content.projectTeams.@each.sdeScopingWeeks")
notInvolvedProjectTeams: (->
return @get("content.projectTeams").filter (projectTeam, index, enumerable) ->
return projectTeam.get("sdeScopingWeeks") is 0
).observes("content.projectTeams.@each.sdeScopingWeeks")
)
然后,我在底层模板中迭代涉及项目团队以及notInvolvedProjectTeams。我收到以下错误:
Uncaught TypeError: Object function () {
return this.get("content.projectTeams").filter(function(projectTeam, index, enumerable) {
return projectTeam.get("sdeScopingWeeks") === 0;
});
} has no method 'addArrayObserver'
为什么property()按预期工作但观察会抛出错误?
谢谢!
答案 0 :(得分:9)
来自Ember的指南
简而言之,计算属性允许您将函数声明为属性。您可以通过将计算属性定义为函数来创建一个,当您要求属性时,Ember将自动调用该属性。然后,您可以像使用任何普通的静态属性一样使用它。
因此,如果您想访问模板中的某些内容,那么它应该是一个属性。
观察者只会返回该函数,因此无法在模板中访问。这就是您访问notInvolvedProjectTeams
时出错的原因,{{1}}只是一个函数而不是属性。
将其定义为计算属性,以便您可以在模板中访问它们。
P.S:您可以使用ember的reduceComputed来定义这些属性。