我做'服务器端验证'。在路由方法'catch'从服务器获取错误。我想在模板中传递这个错误。 如何从路径中传递模板中的错误?
import Ember from 'ember';
import DS from 'ember-data';
export default Ember.Route.extend({
model() {
return this.store.createRecord('project');
},
actions: {
save(project) {
var router = this;
var errors = router.controllerFor('project.new').get('errors')
project.save().then(function(project){
router.transitionTo('projects.show', project);
}).catch(function(resp) {
// how to pass this errors in template ????
console.log(resp.errors);
});
}
},
});
来自router.js
this.route('projects', function() {
this.route('new');
this.route('show', { path: '/:project_id' });
});
来自组件
import Ember from 'ember';
import DS from 'ember-data'
export default Ember.Component.extend({
actions: {
save() {
this.project.set('colors', colors);
this.sendAction('save');
}
},
...
});
答案 0 :(得分:0)
Closure Actions! (假设有一个版本--Ember 1.13+)。与常规操作不同,关闭操作可以具有返回值。
在您的模板上执行:
{{my-component mySave=(action 'save')}}
在您的组件中,您可以
import Ember from 'ember';
import DS from 'ember-data'
export default Ember.Component.extend({
actions: {
save() {
this.project.set('colors', colors);
let result = this.attrs.mySave();
//do something with result
}
},
...
});
然后在你的控制器中:
import Ember from 'ember';
import DS from 'ember-data';
export default Ember.Controller.extend({
actions: {
save(project) {
var router = this;
var errors = router.controllerFor('project.new').get('errors')
project.save().then(function(project){
router.transitionTo('projects.show', project);
}).catch(function(resp) {
return resp.errors;
});
}
},
});
我还建议this article on Closure Actions,这非常有帮助。
编辑:我最初回复路径上的操作(如您的示例所示),但@Kitler正确地提醒关闭操作与控制器或其他组件通信。我不知道这是否是OP的一个选项?