我正在尝试在Ember.js(不使用实时绑定)中创建具有中等数量字段(比如20)的手动保存表单,到目前为止,我对这样做的正确方法/最佳实践感到困惑。我发现以下方法:
http://www.solitr.com/blog/2012/06/ember-input-field-with-save-button/
https://stackoverflow.com/a/16473186/1248965
以上所有方法在某种程度上看来都是很棘手的。他们要么扩展文本字段,要么使用每个字段的观察者,要求您列出每个观察者。还有其他方法吗?类似于“未绑定”助手,但允许自动模型通过某些动作(例如“未绑定-直到”或“条件绑定”或其他)来更新魔术/验证(通过ember-data)?我已经遍历了所有文档,SO,github问题,Ember论坛以及上面的链接,但仍然觉得我一定错过了一些东西。
基本上,这是一种表达方式:“使用通常绑定的表单/字段执行所有操作,但只能在特定操作上执行,而不是实时执行。”
您想要的是“缓冲代理”,您可以在其中将对模型的所有更改临时存储setUnkownProperty
在代理对象中(您可以使用捕获这些更改)。对更改感到满意之后,就可以将所有代理数据复制到实际对象中(“刷新数据”)。
App.Heisenberg = {
firstName: 'Walter',
lastName: 'White',
};
App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Heisenberg;
},
setupController: function(controller, model) {
controller.set('content', model);
}
});
App.IndexController = Ember.ObjectController.extend({
proxy: {},
setUnknownProperty: function(key, value) {
console.log("Set the unknown property: " + key + " to: " + value);
this.proxy[key] = value;
console.log(this.proxy);
},
flush: function() {
for(var key in this.proxy)
this.set('model.'+key, this.proxy[key]);
}
});
模板:
<script type="text/x-handlebars" data-template-name="index">
Saved Name: {{firstName}} {{lastName}}<br />
<br />
<form {{ action "saveEdit" on="submit" }}>
First Name: {{input type="text" valueBinding="firstName"}}<br />
Last Name: {{input type="text" valueBinding="lastName"}}<br />
<br />
<button {{ action "flush" }}>Flush</button>
</form>
</script>
这将成为一个不错的控制器Mixin。
有关实际示例,请参见此jsBin。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句