我想在创建帖子后进行转换。
post / new>点击提交> rails后端成功创建帖子并响应json>重定向到新创建的帖子的路径
在ember_data_example github源代码中。他们使用这种方法
transitionAfterSave: function() {
// when creating new records, it's necessary to wait for the record to be assigned
// an id before we can transition to its route (which depends on its id)
if (this.get('content.id')) {
this.transitionToRoute('contact', this.get('content'));
}
}.observes('content.id'),
它工作正常,因为模型在创建模型时ID为null,并且当模型保存成功时其ID将更改,因为此函数会观察模型ID的更改。
但也许,只要模型的ID属性发生变化,就会执行此功能。 我发现了更多的语义方式。
我想要执行转换 当模型的状态变为'isDirty'= false&& 'isNew'== true form'isDirty'= true,'isNew'= false。
我该如何实现?
答案 0 :(得分:20)
理想情况下,id不应该改变。但是,从语义上讲,这是正确的,这种方法看似不对。
有一种更简洁的方法:
save: function(contact) {
contact.one('didCreate', this, function(){
this.transitionToRoute('contact', contact);
});
this.get('store').commit();
}
更新2013-11-27(ED 1.0测试版):
save: function(contact) {
var self = this;
contact.save().then(function() {
self.transitionToRoute('contact', contact);
});
}
答案 1 :(得分:4)
Ember 2.4的注意事项它被包装以处理组件或路由级别中的保存操作(并避免使用控制器)。这是下面的一个例子。请注意转换中模型对象上的id。并注意我们如何在路线中使用transitionTo而不是transitionToRoute。
actions: {
save() {
var new_contact = this.modelFor('contact.new');
new_contact.save().then((contact) => {
this.transitionTo('contact.show', contact.id);
});
},
答案 2 :(得分:3)
actions: {
buttonClick: function () {
Ember.debug('Saving Hipster');
this.get('model').save()
.then(function (result) {
this.transitionToRoute('hipster.view', result);
}.bind(this));
}
}