Ember.js can';t使用余烬数据保存/更新记录
我的路由器定义如下:Ember.js can';t使用余烬数据保存/更新记录,ember.js,ember-data,Ember.js,Ember Data,我的路由器定义如下: this.resource('uoms', { path: '/uoms' }, function() { this.route('new'); }); 而计量单位路线定义为: App.UomsRoute = Ember.Route.extend({ model: function() { return this.store.find('uom'); }, actions: { save: function
this.resource('uoms', { path: '/uoms' }, function() {
this.route('new');
});
而计量单位
路线定义为:
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')
调用返回的对象,我们得到以下结果:
this.resource('uoms', { path: '/uoms' }, function() {
this.route('new');
});
这就是我要做的:
- 使用ChromeDeveloper工具在尝试保存模型的行上设置断点
- 要检查控制器持有的模型,请在Chrome开发者工具控制台中输入
this.get('model')
this.get('model').save()
时,您将看到同样的错误
顺便问一下:为什么您使用的是ArrayController
,而不是ObjectController
。看起来您将其用于单个模型。有关这方面的详细信息,请参阅
编辑:
尝试
this.get('model').get('transaction').commit()
我遇到的问题是,我试图对记录数组而不是单个记录调用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>
然后,您将需要对车把模板执行以下操作:
<span class="glyphicon glyphicon-floppy-disk" {{action "save" this}}></span>
<span class="glyphicon glyphicon-remove-circle" {{action "deleteRecord" this}}></span>
Uom确实是该型号的阵列控制器Uom
。为什么你认为不是呢?我将尝试你建议的调试策略,看看我得到了什么。谢谢。我不清楚你的场景是什么样子:你在一个模板中显示多个项目吗?您是否在该模板中包含表单?表单是否允许编辑单个计量单位实例,甚至多个项目?到底是什么触发了“保存”操作?我有一个计量单位列表,用户可以点击其中一个来编辑它。一旦他们编辑了一条记录,我想用save()
将更改保留回后端。我已经用this.get('model')
调用的结果更新了原始问题。它看起来有点像一个合理的对象,但正如您从新屏幕截图中看到的,错误保持一致。我只是注意到我从未在代码中使用save()
。但是get('transaction')。commit()
应该可以做到这一点。我相应地编辑了我的答案。使用.destroyRecord()
将删除记录并同时保存。