[英]How to use a blank Ember Data model in a route?
我无法在以下内容中找到任何东西,对此可能有的任何帖子或指南将不胜感激!
我正在尝试使用表单和路由器创建新记录。 我要解决的方法是在路由器中设置模型,然后在用户通过操作提交表单时保存记录。
我看到了其他示例,其中作者在控制器中执行“ createRecord”并使用“ get”或“ getProperties”从表单中获取值。 但是,在下面的代码中,这似乎要简单得多:
Dashboard.CreateAccountRoute = Ember.Route.extend({
model: function() {
return this.store.createRecord('account', {});
},
actions: {
createAccount: function () {
var account = this.modelFor('create_account');
var self = this;
account.save().then(function(account){
self.flashMessage('The account was added successfully!', 'alert-success');
self.transitionTo("accounts");
}, function(reason) {
self.flashMessage('There was an error saving the account. Please try again.', 'alert-error');
console.log(reason);
});
}
}
});
当然,这样做的问题是,如果用户不提交表单,则记录仍会添加到本地存储中。 否则,它将用作表单中记录中的预期设置值。
在执行“ createAccount”操作之前,如何在不保存任何内容的情况下完成上述操作?
您可以使用路线的deactivate
挂钩来回滚您的模型。 这是一个例子:
deactivate: function() {
var model = this.get('controller.model');
if (model != null) {
model.rollback();
}
}
您可以使用willTransition
事件。 这是我们应用程序中的真实示例:
App.FlavorNewRoute = Ember.Route.extend({
setupController: function(controller) {
var game = this.modelFor('game');
var newFlavor = this.store.createRecord('flavor', {
name: '',
blueprintName: game.get('blueprintName'),
organizationId: game.get('organizationId'),
isArchived: false,
isLocked: false,
entries: []
});
controller.set('content', newFlavor);
},
actions: {
willTransition: function(transition) {
var flavor = this.controller.get('content');
if(flavor.get('isNew') && flavor.get('isDirty')) {
flavor.destroyRecord();
}
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.