Ember.js:如何观察输入字段中的值何时发生变化

时间:2014-06-10 00:30:27

标签: javascript ember.js

我需要在我的Ember.js应用中创建一个简单的HTML输入文本字段。此特定输入框的值未绑定到任何特定模型。当输入文本框模糊或失去焦点时,我需要能够运行一些JavaScript。在我的模板中,到目前为止我有这个:

{{input valueBinding="pitcherSalary" placeholder=0}}

我尝试通过在控制器中执行以下操作来观察pitcherSalary的值而没有任何运气:

MyApp.OptimalController = Ember.ObjectController.extend({
 pitcherSalaryObserver: function () {
    var self = this;
    console.log("changing....");
  }.observes('pitcherSalary'), 
});

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

你说它没有某种型号的支持,但是你的控制器说它是由某种型号支持的。很可能你让Ember感到困惑,它想要保存到应该支持控制器的模型,但它找不到模型。 ObjectController代理从控制器到模型的属性,当它没有模型时,它会对滥用行为大吼大叫。

Bad:没有模型的ObjectController

http://emberjs.jsbin.com/niyawido/3/edit

好:带模型的ObjectController

http://emberjs.jsbin.com/niyawido/4/edit

好:没有型号的控制器

http://emberjs.jsbin.com/niyawido/2/edit

答案 1 :(得分:1)

为什么不使用普通的"值"在你的输入标签?这是一个使用原型扩展使用您想要的可观察样式的胖子示例:http://emberjs.jsbin.com/zuxuli/2/edit

我的意见:

{{input type=number value=amount placeholder="Billed Amount"}}
{{input type="checkbox" checked=roundTip}} //"checked" is a kind of value attrib

我的观察结果:

observeStuff: function () {
  console.log("blah!!!");
}.observes('roundTip'),

observeStuff2: function () {
  console.log("crap!!!");
}.observes('amount'),

希望这有帮助。

修改:有关更好的文档,请参阅Ember.Observable#addObserver