为了让绑定工作,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