Javascript 从Ember.View更新子视图
我正在做一个带有服务器API调用的ajax表单。 服务器可以返回特定字段的错误消息(例如:url=>“此url不正确”) 因此,我为我的表单文本字段创建了一个特定视图:Javascript 从Ember.View更新子视图,javascript,ember.js,Javascript,Ember.js,我正在做一个带有服务器API调用的ajax表单。 服务器可以返回特定字段的错误消息(例如:url=>“此url不正确”) 因此,我为我的表单文本字段创建了一个特定视图: (textfield.handlebars) {{view Ember.TextField valueBinding="value"}} {{#if hasError}} <div class="error">{{errorMessage}}</div> {{/if}} (textfield.j
(textfield.handlebars)
{{view Ember.TextField valueBinding="value"}}
{{#if hasError}}
<div class="error">{{errorMessage}}</div>
{{/if}}
(textfield.js)
App.TextField = Ember.View.extend({
hasError: false,
errorMessage: "",
templateName: "textfield",
});
(textfield.把手)
{{view Ember.TextField valueBinding=“value”}
{{{#如果hasError}}
{{errorMessage}}
{{/if}
(textfield.js)
App.TextField=Ember.View.extend({
错误:错,
错误消息:“”,
templateName:“textfield”,
});
在我的表单视图模板中,我有:
(form.handlebars)
<div class="form-row">
<div class="form-element"><div class="input-wrapper">{{view App.TextField valueBinding="skill.job"}}</div></div>
</div>
(new.js)
submit: function() {
var skill = this.get("skill");
skill.saveResource()
.fail( function(e) {
//how could I set the errorMessage in my App.TextField
});
}
(形把手)
{{view App.TextField valueBinding=“skill.job”}
(new.js)
提交:函数(){
var skill=this.get(“skill”);
skill.saveResource()
.失败(功能(e){
//如何在App.TextField中设置错误消息
});
}
当用户单击submit按钮时,我将所有表单数据发送到服务器并检索错误消息
我的问题是如何更新“subview”App.text字段以设置错误消息?在form.handlebar上手动为其设置id(这样它将覆盖ember自动生成的id):
在form.handlebar上手动为其设置id(因此它将覆盖ember自动生成的id):
您可以使用保存错误消息的自定义
App.Error
对象。此外,如果您计划使用余烬数据,还将讨论验证问题。优秀的Ember.js插件中有一个验证扩展:
以下是我的想法,请看:
把手:
名称:{{view App.TextField valueBinding=“content.name”propertyName=“name”}
年龄:{{view App.TextField valueBinding=“content.age”propertyName=“age”}
拯救
JavaScript:
App.Error=Ember.Object.extend({
isError:函数(propertyName){
return!Ember.empty(this.getErrorMessage(propertyName));
},
getErrorMessage:函数(propertyName){
返回此.get(propertyName);
}
});
App.ErrorMixin=Ember.Mixin.create({
classNameBindings:['iError:error'],
errorBinding:'parentView.error',
模板:Ember.handlebar.compile({{{if-isError}}{{errorMessage}}{{/if}}}),
isError:function(){
var error=this.get('error');
返回error&&error.isError(this.get('propertyName');
}.property('error','propertyName'),
errorMessage:函数(){
var error=this.get('error');
如果(错误){
var propertyName=this.get('propertyName');
返回错误。getErrorMessage(propertyName);
}
}.property('错误','属性名称')
});
App.TextField=Ember.TextField.extend(App.ErrorMixin);
然后,错误对象的构造如下所示:
Ember.View.create({
templateName: 'edit',
contentBinding: 'App.obj',
save: function() {
var content = this.get('content');
var error = this.get('error');
if (error) {
error.destroy();
}
error = App.Error.create();
if (content.get('age') <= 100) {
error.set('age', 'sorry, you are not wise enough');
}
if ('Chuck Norris' === content.get('name')) {
error.set('name', 'yeah, and i am the queen of england');
}
this.set('error', error);
}
}).append();
Ember.View.create({
templateName:“编辑”,
contentBinding:'App.obj',
保存:函数(){
var content=this.get('content');
var error=this.get('error');
如果(错误){
error.destroy();
}
error=App.error.create();
如果(content.get('age')您可以使用一个保存错误消息的自定义App.Error
对象。此外,如果您计划使用ember数据,则会讨论验证问题。优秀的ember.js插件中有一个验证扩展:
以下是我的想法,请看:
把手:
名称:{{view App.TextField valueBinding=“content.name”propertyName=“name”}
年龄:{{view App.TextField valueBinding=“content.age”propertyName=“age”}
拯救
JavaScript:
App.Error=Ember.Object.extend({
isError:函数(propertyName){
return!Ember.empty(this.getErrorMessage(propertyName));
},
getErrorMessage:函数(propertyName){
返回此.get(propertyName);
}
});
App.ErrorMixin=Ember.Mixin.create({
classNameBindings:['iError:error'],
errorBinding:'parentView.error',
模板:Ember.handlebar.compile({{{if-isError}}{{errorMessage}}{{/if}}}),
isError:function(){
var error=this.get('error');
返回error&&error.isError(this.get('propertyName');
}.property('error','propertyName'),
errorMessage:函数(){
var error=this.get('error');
如果(错误){
var propertyName=this.get('propertyName');
返回错误。getErrorMessage(propertyName);
}
}.property('错误','属性名称')
});
App.TextField=Ember.TextField.extend(App.ErrorMixin);
然后,错误对象的构造如下所示:
Ember.View.create({
templateName: 'edit',
contentBinding: 'App.obj',
save: function() {
var content = this.get('content');
var error = this.get('error');
if (error) {
error.destroy();
}
error = App.Error.create();
if (content.get('age') <= 100) {
error.set('age', 'sorry, you are not wise enough');
}
if ('Chuck Norris' === content.get('name')) {
error.set('name', 'yeah, and i am the queen of england');
}
this.set('error', error);
}
}).append();
Ember.View.create({
templateName:“编辑”,
contentBinding:'App.obj',
保存:函数(){
var content=this.get('content');
var error=this.get('error');
如果(错误){
error.destroy();
}
error=App.error.create();
如果(content.get('age')感谢您的快速回答!这很有效,但是如果我的表单很大(您可以添加/编辑以前的字段),我必须为每个字段生成一个id。没有简单的方法从Ember获取生成的id?(个人广告提醒)我计划在我自己的表单生成器库中添加这个。但是我没有时间这么做。谢谢你的快速回答!这很有效,但是如果我的表单非常大(你可以添加/编辑以前的字段),我必须为每个字段生成一个id。没有简单的方法从Ember获取生成的id?(个人广告提醒)我计划在我自己的FormBuilder库中添加这个,但我还没有时间这么做
Ember.View.create({
templateName: 'edit',
contentBinding: 'App.obj',
save: function() {
var content = this.get('content');
var error = this.get('error');
if (error) {
error.destroy();
}
error = App.Error.create();
if (content.get('age') <= 100) {
error.set('age', 'sorry, you are not wise enough');
}
if ('Chuck Norris' === content.get('name')) {
error.set('name', 'yeah, and i am the queen of england');
}
this.set('error', error);
}
}).append();