2014-03-25 105 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