gpt4 book ai didi

javascript - 从 Ember.View 更新 subview

转载 作者:行者123 更新时间:2023-11-28 13:52:16 24 4
gpt4 key购买 nike

我正在使用服务器 API 调用创建 ajax 表单。服务器可以返回特定字段的错误消息(例如:url => '此 url 不正确')。

所以我为我的表单文本字段创建了一个特定的 View :

(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",
});

在我的表单 View 模板中,我有:

(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
});
}

当用户单击提交按钮时,我会将所有表单数据发送到服务器并检索错误消息。

我的问题是如何更新“ subview ”App.TextField 以设置错误消息?

最佳答案

您可以使用自定义的App.Error对象来保存错误消息。另外,如果您计划使用 ember-data,则有关于验证的讨论 https://github.com/emberjs/data/pull/130 。优秀的 Ember.js 插件中有一个验证扩展:https://github.com/capitainetrain/ember-addons/tree/master/packages/ember-validators/lib .

这就是我的想法,请参阅http://jsfiddle.net/pangratz666/kQJ2t/ :

Handlebars :

<script type="text/x-handlebars" data-template-name="edit" >
name: {{view App.TextField valueBinding="content.name" propertyName="name" }}</br>
age: {{view App.TextField valueBinding="content.age" propertyName="age" }}</br>
<button {{action "save"}}>save</button>
</script>​

JavaScript:

App.Error = Ember.Object.extend({
isError: function(propertyName) {
return !Ember.empty(this.getErrorMessage(propertyName));
},
getErrorMessage: function(propertyName) {
return this.get(propertyName);
}
});

App.ErrorMixin = Ember.Mixin.create({
classNameBindings: ['isError:error'],
errorBinding: 'parentView.error',

template: Ember.Handlebars.compile('{{#if isError}}{{errorMessage}}{{/if}}'),

isError: function() {
var error = this.get('error');
return error && error.isError(this.get('propertyName'));
}.property('error', 'propertyName'),

errorMessage: function() {
var error = this.get('error');
if (error) {
var propertyName = this.get('propertyName');
return error.getErrorMessage(propertyName);
}
}.property('error', 'propertyName')
});

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();​

关于javascript - 从 Ember.View 更新 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com