我的路由器定义了以下内容:
this.resource('uoms', { path: '/uoms' }, function() {
this.route('new');
});
uoms
路由定义为:
App.UomsRoute = Ember.Route.extend({
model: function() {
return this.store.find('uom');
},
actions: {
save: function() {
this.modelFor('uoms').save().then(function() {
console.log("saved UOMs");
});
}
}
});
但出于某些原因,当我尝试保存它时,我得到了:
未捕获TypeError:对象[object Object]没有方法'save'
有人可以帮我辨别我做错了吗?
----更新----
我还从控制器尝试了以下内容,但结果相同:
App.UomsController = Ember.ArrayController.extend({
actions: {
save: function() {
this.get('model').save().then(function() {
console.log("saved UOMs");
});
}
}
});
----更新2 ----
查看this.get('model')
调用返回的对象,我们得到以下内容:
答案 0 :(得分:2)
这就是我要做的事情:
this.get('model')
Chrome开发者工具控制台。检查控制台输出是否真的符合您的预期。最有可能的不是您想要保存的模型实例。您将看到在控制台中执行this.get('model').save()
时会出现相同的错误。
BTW:你为什么使用ArrayController
而不是ObjectController
。看起来您将它用于单个模型。有关详细信息,请参阅docs。
编辑:
尝试this.get('model').get('transaction').commit()
答案 1 :(得分:1)
我遇到的问题是我试图在一组记录而不是单数记录上调用save()
。创建此问题的原因是我在单个记录上操作但在ArrayController
内执行此操作。我不认为这有什么不妥,虽然可以说我应该创建一个名为“编辑”的子路由,然后我的代码逻辑可能会起作用。
那就是说,如果你想像我一样(也就是说,在ArrayController中保存单个记录),那么这段代码就可以了:
save: function(id) {
var promise = this.store.find('uom',id).then(function(uom){
console.log(uom);
uom.save();
});
}
然后在模板中输入这样的内容:
<span class="glyphicon glyphicon-floppy-disk" {{action "save" id}}></span>
这可行,但不是最好的答案。相反,您可以使用ArrayController
属性在ObjectController
和itemController
中指定。以下是使用此策略的save()
和deleteRecord()
处理程序的示例:
App.PluralController = Ember.ArrayController.extend({
itemController: 'singular'
});
App.SingularController = Ember.ObjectController.extend({
actions: {
save: function() {
this.get('model').save();
},
deleteRecord: function() {
this.get('model').deleteRecord();
this.get('model').save();
}
}
});
然后你会想要为你的把手模板做以下的事情:
<span class="glyphicon glyphicon-floppy-disk" {{action "save" this}}></span>
<span class="glyphicon glyphicon-remove-circle" {{action "deleteRecord" this}}></span>