Ember计算未绑定在模板中的控制器上的属性

时间:2014-05-16 17:01:02

标签: ember.js coffeescript

我正在尝试实施一个密码强度检查器,它会在每次按键时更新。我的模板如下所示:

{{input type="password" id="password" value=password }}

我的控制器看起来像这样:

App.SignupController = Ember.Controller.extend
  passwordStrength: ((key,val) ->
    # check strength if val is defined
    return
  ).property('password')
在字段中输入文本时,永远不会调用

passwordStrength

然而,如果我将方法重命名为password并删除计算属性的名称,它确实有效:

App.SignupController = Ember.Controller.extend
  password: ((key,val) ->
    # check strength if val is defined
    return
  ).property()

我宁愿理解为什么前者不起作用,也使用一种更明智的命名方法。

1 个答案:

答案 0 :(得分:1)

我已经创建了一个jsbin供您查看,它正在工作,并在更新密码时进行更新。我想我知道为什么这不适合你。在我的js bin这里http://emberjs.jsbin.com/gekofo/4/edit?html,js,console,output你会注意到只有观察者console.logs。而在你的程序中我会想象你可能没有显示passwordStrength值。如果您将{{passwordStrength}}添加到我的bin中的模板中,您将看到该属性已更新。所以看起来你可能想要使用我编写的passwordStrength2,因为它会更新它是否显示在DOM中。

简而言之:

passwordStrength2: function() {
   //check strength if val is defined
   console.log("OBSERVER::", this.get('password.length'))
   return this.get('password.length');
}.observes('password')

NOT:

passwordStrength: function() {
  //check strength if val is defined
  console.log("PROPERTY::", this.get('password.length'))
  return this.get('password.length');
}.property('password')

另外我不知道coffeescript,很抱歉我的回答是javascript。