ember.js 使用Ember数据从保存()响应重新加载

k10s72fa  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(170)

我目前正在使用EmberJs和Ember-Data来构建一个由Laravel JSON api支持的应用程序。
我在保存过程中遇到了一个小问题,主要是在模型创建上。
以下是我的工作流程:

  1. Ember对象控制器将自身保存为this.get("model").save()
  2. Laravel(REST api)接收数据并将其持久化,从而为其创建一个唯一ID
  3. api返回具有正确ID的新数据(遵守Ember约定)
  4. Ember-Data似乎并不关心响应,因为它什么也不做...
    问题就在这里:id仍然是未定义的,即使它已经被给定...
    我发现的变通办法是重新加载模型...但考虑到我想要重新加载的数据直接在save()后提供给Ember,这是一个很大的性能缺陷
    有什么主意吗?

编辑**

问题只出现在我添加的第一个对象上。当我重复该过程时,下一个对象将正确刷新。如果我点击刷新,它将再次开始:第一个对象错过了他的刷新,接下来的就没问题了。
下面是我关于add过程的代码:

路线

App.CategoriesNewRoute = Ember.Route.extend({
    model: function()
    {
        return this.store.createRecord("category").set("active", true);
    },
    setupController: function(ctrl, model)
    {
        ctrl.set("errors", 0);
        ctrl.set("model", model);
    }
});

我没有CategoriesRoute的路由器,因为数据从一开始就都在我的ArrayController中。

控制器

App.CategoriesNewController = Ember.ObjectController.extend({
    needs: "application",
    actions:
    {
        save: function()
        {
            this.get("model").save();
            this.get("target").transitionTo("categories");    
        },
        cancel: function()
        {
            this.get("model").rollback();
            this.get("target").transitionTo("categories");
        }
    }
});

**EDIT****2我尝试了下面提供的代码,但没有成功...

我添加了2条记录,第一条记录没有ID...第二条记录有ID,因此问题似乎只出现在第一次保存时...
下面是我从API中得到的两个响应
对象A

{"category":{"nameFr":"aaa","nameEn":"aaa","active":true,"id":10}}

对象B

{"category":{"nameFr":"bbb","nameEn":"bbb","active":true,"id":11}}
6xfqseft

6xfqseft1#

这可能是因为您在保存完成之前进行了转换,因此在您正在保存的模型仍在运行时触发了类别路径上的模型挂钩(您在控制台中收到任何错误了吗?)。

save: function()
    {
        var that = this;
        this.get("model").save().then(function(){
            that.get("target").transitionTo("categories");
        });
    },

另外,你不需要this.get('target')...,因为有一个控制器方法transitionToRoute。你可以简化为:

save: function()
    {
        var that = this;
        this.get("model").save().then(function(){
            that.transitionToRoute("categories");
        });
    },
0wi1tuuw

0wi1tuuw2#

发现问题似乎出在Ember-Data这边...
把整件事记录在这里
http://discuss.emberjs.com/t/missing-id-on-first-save-on-a-new-object/4752

相关问题