javascript - 如果存在这种 hasMany 关系,我应该如何将我的模型放入 ember 中?

标签 javascript jquery model-view-controller ember.js

我从服务器发送的 JSON 如下所示,

{"selectFill":{"user":[{"userId":"Gru","department":"Villain"},{"userId":"Sulley","department":"Scare"},{"userId":"Popeye","department":"Sailer"}]}}

我的模型看起来像这样,

    App.SelectFill = DS.Model.extend({
    users: DS.hasMany('user',{
        embedded: true
    })
});

App.User = DS.Model.extend({
    userId: DS.attr('string'),
    department: DS.attr('department')
});

App.SelectFillSerializer = DS.WebAPISerializer.extend({
    extractArray: function (store, type, payload, id, requestType) {

        var primaryTypeName = type.typeKey;

        var typeName = primaryTypeName,
            type = store.modelFor(typeName);

        var selectFill = [];
        selectFill.push(payload.selectFill);
        var newi = {};
        newi[typeName] = selectFill;

        return this._super(store, type, newi, id, requestType);
    }
});

我使用 Chrome 调试器中的 ember 检查器检查了代码,我可以在 SelectFill 中看到 1 条记录,但它是空的。用户记录也是空的。 你能告诉我,我在这里做错了什么吗?我是 Ember 的新手,我试图进入 Ember 源代码和我的头,但我的头开始旋转。每个人是否也通过深入 Ember 源代码来调试他们的代码?

最佳答案

您需要将数据转换为这种格式,并且您的所有记录都需要 id(如果您希望 userId 成为用户的 id,请将其从模型定义中删除并将其添加到适配器中)

{
  "selectFill":
    {
      id:'something',
      "users":['Gru', 'Sulley','Popeye']
    },
  "users":[
    {"userId":"Gru","department":"Villain"},
    {"userId":"Sulley","department":"Scare"},
    {"userId":"Popeye","department":"Sailer"}]
  }

App.UserAdapter = DS....extend({

   primaryKey: 'userId'
});

https://github.com/emberjs/data/blob/master/TRANSITION.md

关于javascript - 如果存在这种 hasMany 关系,我应该如何将我的模型放入 ember 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602346/

相关文章:

javascript - 将 $scope 添加到 Controller

php - Zend Framework 2 - DI 并且必须将表适配器注入(inject)表中......乏味吗?

javascript - 检测点击窗口滚动条

javascript - 计数 child + 更改 CSS

php - 了解 Controller 上的 MVC : Whats the concept of "Fat" on models, "Skinny"?

javascript - jQuery:为什么我的动画 p "jump"?

javascript - jQuery Animate 顶部(从底部到顶部)

c# - Javascript setTimeOut 函数与.net 中Windows 应用程序的计时器时间不匹配?

javascript - jQuery .before() 然后找到它的内容并应用 for 循环。我究竟做错了什么

javascript - 使用 jQuery 删除 HTML onchange 代码