灰烬 - 观察与财产冲突

时间:2014-01-30 10:06:40

标签: ember.js

我的控制器中有以下道具

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()按预期工作但观察会抛出错误?

谢谢!

1 个答案:

答案 0 :(得分:9)

来自Ember的指南

  

简而言之,计算属性允许您将函数声明为属性。您可以通过将计算属性定义为函数来创建一个,当您要求属性时,Ember将自动调用该属性。然后,您可以像使用任何普通的静态属性一样使用它。

因此,如果您想访问模板中的某些内容,那么它应该是一个属性。

观察者只会返回该函数,因此无法在模板中访问。这就是您访问notInvolvedProjectTeams时出错的原因,{{1}}只是一个函数而不是属性。

将其定义为计算属性,以便您可以在模板中访问它们。

P.S:您可以使用ember的reduceComputed来定义这些属性。