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()
将删除记录并同时保存。