2014-03-25 168 views
0

我有一个数字属性,可以通过按钮单击(使用incrementProperty)或通过直接输入与文本字段进行更改。Ember:incrementProperty与按钮和输入交互

当两者一起使用时,incrementProperty开始在数字的末尾附加“1”而不是增加数字。

看到这个问题simple Ember jsbin我修改了。

重现:

  1. 在文本框中输入一个数字。
  2. 点击+按钮。

奇怪的是,decrementProperty似乎工作正常。如果您按照上述步骤操作,然后单击按钮,它似乎将值从字符串重置为数字,并且递增和递减都正常工作。同样,如果你输入一个数字并点击按钮,一切正常。这是一个错误,还是我错过了什么?

回答

4

看起来像incrementProperty执行连接操作而不是数字加法,因为输入帮助程序将该值设置为string

如果您看到source对于incrementProperty方法,您可以发现下面应该执行增量操作的行。

set(this, keyName, (get(this, keyName) || 0) + increment); 

这可以执行数字加法或连接,具体取决于键的值。

decrementProperty正常工作-运算符未超载。例如,"22" - 1返回21.

快速解决方法是在递增之前执行类型转换。我修改了jsBin中的代码,以便在更改时打印该值的类型。当您使用输入助手输入值时,您可以看到它打印string

App.ApplicationController = Ember.Controller.extend({ 
    age: 36, 
    ageDidChange: function() { 
     console.log(typeof(this.get('age'))); 
    }.observes('age'), 
    actions: { 
     older: function() { 
      this.set('age', parseInt(this.get('age'), 10) + 1); 
     }, 
     younger: function() { 
      this.decrementProperty('age'); 
     } 
    } 
}); 
+0

谢谢,这工作完美。比Ember方法打字多一点,但更有效。 :) – fedoroffn