2014-04-11 20 views
1

的代码给出了一个错误说: 遗漏的类型错误:未定义是不是一个函数如何根据表达式的结果来默认Ember模型的值?下面

有人可以帮助我正确地构建,这样我可以默认基于此表达式的值?

,defaultPersonType: function defaultPersonType() { 
     console.log(this) 
     var people = this.get("store").all("person").content 
      ,primaryFound = false 
      ,spouseFound = false 
      ,dependantFound = false 
      ,defaultType = "CHILD" 
     for (var i = 0; i < people.length; i++) { 
      switch(people.get("personType")) { 
       case "PRIMARY": 
        primaryFound = true 
        break 
       case "SPOUSE": 
        spouseFound = true 
        break 
       case "UNMARRIED_PARTNER": 
        spouseFound = true 
        break 
       default: 
        dependantFound = true 
        break 

      } 
      if (!primaryFound) { 
       defaultType = "PRIMARY" 
      } 
      if (!!dependantFound) { 
       defaultType = "CHILD" 
      } 
      if (!spouseFound) { 
       defaultType = "SPOUSE" 
      } 
     } 
     return DS.attr('string', {defaultValue: function() {return defaultType}}) 
    } 
    ,personType: (function() { 
     return this.defaultPersonType() 
    }()) 
+0

您不应该在Ember模型中访问商店。 – quaertym

+0

那么你会怎么做呢? – Jaime

回答

0

那么,你的

this 

是错误的匿名函数。所以,这样做:

function() { return this.defaultPersonType(); }.bind(this)()) 
0

我认为最好的地方来实现这个逻辑是在路线的模型钩子。