我开始使用 ember,但我无法理解的一件事是如何使用单向绑定,请考虑以下代码:
HTML
<script type="text/x-handlebars">
<h1>Some App</h1>
<p>
My Name is: {{name}}
</p>
<form {{action 'updateName' on="submit"}}>
{{view Ember.TextField valueBinding="name"}}
<input type="submit" value="Save">
</form>
</script>
JS
var App = Ember.Application.create();
App.ApplicationRoute = Ember.Route.extend({
model: function() {
return {
name: 'John Doe'
}
},
events: {
updateName: function() {
console.log('Name Updated!');
}
}
});
JS 小提琴供参考 http://jsfiddle.net/X2LmC/
默认情况下Ember.TextField
的值将绑定到我的模型,反之亦然,这意味着当我在文本上键入时,模型和视图将实时更新,但是我想要做的是将模型绑定到文本字段(因此初始名称将显示),但仅在提交表单时更新模型。有简单的方法吗?
提前致谢。
EDIT:仅供参考,我更新了我的小提琴以使用Ember.Binding.oneWay
我认为最终结果比 @c4p 答案更清晰:http://jsfiddle.net/X2LmC/3/ http://jsfiddle.net/X2LmC/3/但我不确定是否这样做$('#user-name').val()
获取字段值是正确的方法。
您可以使用观察者、控制器上的中间绑定变量以及控制器上的事件处理程序来完成想要做的事情。
The nameOnController
控制器的属性将被更新时nameDidChange()
观察者开火,确保nameOnController
属性将初始化为模型的name
财产并反映任何未来的变化name
。将此中间属性绑定到TextField
绝缘name
立即键入更改属性并使用控制器上的事件来读取和设置name
仅当单击按钮时才具有属性。
模板:
{{view Ember.TextField valueBinding="nameOnController"}}
JS:
App.ApplicationController = Ember.ObjectController.extend({
nameOnController: null,
nameDidChange: function() {
var name = this.get('name');
this.set('nameOnController', name);
}.observes('name'),
updateName: function() {
var controllerName = this.get('nameOnController');
this.set('name', controllerName);
},
setName: function() {
this.set('name', "new name");
}
});
更新 JSFiddle 示例 http://jsfiddle.net/X2LmC/1/
您可以检查更改name
属性仍然反映在文本框中,通过单击Set New Name
button.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)