爲了讓綁定工作,Ember需要知道綁定值何時發生更改才能使其同步。爲了讓Ember知道一個值已經改變,你需要使用Ember.set
。例如:
object.set('value', 'I changed');
// This says: Ember, my value has changed, please sync!
所以,當不使用Ember.set
一定的屬性發生變化,恩貝爾不知道它應該同步它。因此,我們需要聽取這個事件的變化,並告訴Ember使用Ember.set
進行更改。
這就是輸入值發生的情況。當您鍵入時,值會更改,但未調用Ember.set
。那麼Ember.TextField
所做的就是聽取keyup
和change
和其他事件,並在其中一個事件被觸發時調用Ember.set
。
當然,你不有使用它們,但你必須手動聽這些變化,並告訴灰燼數值改變:this.set('value', this.$().val())
)
我不明白爲什麼你使用Ember.TextField
時出現問題,因爲它幾乎可以做任何事情,而且它所做的一切都可以節省您自己聆聽事件的麻煩。
有一兩件事可以幫助你的是,你可以直接使用它在你的模板,而不是創建一個視圖來擴展它:
{{view Em.TextField placeholder="Twitter username" valueBinding="username" type="search"}}
這幾乎是等量的打字:
<input type="search" placeholder="Twitter username" value="some value" />
注意:從上面提供的示例看來,您似乎在遵循舊的教程,要小心,自那以後很多變化。
謝謝!爲了回答你的問題,唯一的問題就是這樣一個事實,那就是大部分的UI都必須在客戶端上完成,這可能會變得很慢,特別是在IE上。想象一下,你自己是處理約1000個元素的管理面板的一部分,然後會發生什麼? – 2013-02-28 13:29:47
無論您是直接綁定屬性還是需要使用視圖,都需要使用JS呈現。這就是Ember的工作原理,在JS中渲染是一個給定的。如果你有1000個元素的性能問題,那麼要麼重新考慮你的UI(大約1000個元素),要麼重新思考Ember是否最適合這個項目。 – 2013-02-28 14:10:03