0

正如 Emberjs 建议的那样,为了将元素值/属性等绑定到控制器,我必须使用 Emberjs 创建该元素。例如:

App.SearchTextField = Em.TextField.extend({ });

和观点:

{{view App.SearchTextField placeholder="Twitter username"
                           valueBinding="App.tweetsController.username"}}

这意味着页面的几乎所有内容都应该在 Emberjs 的控制之下。这不是很方便。

是否可以对现有元素进行任何类型的值或事件绑定?

4

1 回答 1

1

为了使绑定起作用,Ember 需要知道绑定值何时更改,以便同步它。为了让 Ember 知道某个值已更改,您需要使用Ember.set. 例子:

object.set('value', 'I changed'); 
// This says: Ember, my value has changed, please sync!

因此,当某个属性在没有使用的情况下发生更改时Ember.set,Ember 不知道它应该同步它。因此,我们需要监听这个事件变化,并告诉 Ember 它使用Ember.set.

这就是输入值发生的情况。当您键入时,值会更改,但Ember.set不会被调用。那么,当这些事件之一被触发时Ember.TextField,监听keyupchange其他事件和调用是做什么的。Ember.set

当然,您不必使用它们,但是您必须手动监听这些更改并告诉 Ember 值已更改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" />

注意:从您上面提供的示例中,看起来您正在遵循旧教程,请注意,从那时起很多都发生了变化。

于 2013-02-28T12:02:37.860 回答