我正在尝试实施一个密码强度检查器,它会在每次按键时更新。我的模板如下所示:
{{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()
我宁愿理解为什么前者不起作用,也使用一种更明智的命名方法。
答案 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。