繁体   English   中英

无法使用余烬数据保存/更新记录

[英]can't save/update record using ember-data

我的路由器定义以下内容:

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')调用返回的对象,我们得到以下信息:

这就是我要做的:

  • 使用Chrome开发者工具在您尝试保存模型的行上设置断点
  • 要检查控制器持有的模型,请输入Chrome开发者工具控制台this.get('model')

检查控制台输出是否确实是您期望的。 很有可能不是您要保存的模型实例。 您将在控制台中执行this.get('model').save()时看到相同的错误。

顺便说一句:为什么要使用ArrayController而不是ObjectController 看起来您将其用于单个模型。 有关更多详细信息,请参阅文档

编辑:

试试this.get('model').get('transaction').commit()

我遇到的问题是我试图在记录数组而不是单个记录上调用save() 出现此问题的原因是,我正在对单个记录进行操作,但在ArrayController执行了此操作。 我认为这没有什么错,尽管可以说我应该创建一个名为“ edit”的子路由,然后假定我的代码逻辑会起作用。

就是说,如果您想像我一样做(也就是在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>

这有效,但不是最佳答案。 相反,你可以在指定ArrayControllerObjectControlleritemController财产。 下面是使用此策略的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM