ember数据没有找到属性名称的模型 [英] ember data no model was found for attribute name

查看:114
本文介绍了ember数据没有找到属性名称的模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经定义了一个模型(app / models / job.js)

I have defined a model(app/models/job.js)

import DS from 'ember-data';

export default DS.Model.extend({
    status: DS.attr(),
    result: DS.attr()
});

我正在尝试从索引控制器(app / controllers / index.js)加载它

And I am trying to load it from the index controller(app/controllers/index.js)

import Ember from 'ember';

export default Ember.Controller.extend({
    productName: "",
    customerName: "",
    startDate: "",
    endDate: "",
    actions: {
        search: function() {
            let data = this.store.find("job", '9e5ce869-89b3-4bfc-a70f-034593c21eae');
            return data;
        }
    }
});

我得到的HTTP响应是:

The HTTP response I get is:

{
    "status": "OK",
    "result": {
        "b": 2,
        "a": 2,
        "see": 1,
        "c": 1
    }
}

如何得到以下错误和警告:

How ever I get following error and warning:

WARNING: Encountered "status" in payload, but no model was found for model name "status" (resolved model name using next-gen-analytics@serializer:job:.modelNameFromPayloadKey("status"))
WARNING: Encountered "result" in payload, but no model was found for model name "result" (resolved model name using next-gen-analytics@serializer:job:.modelNameFromPayloadKey("result"))
TypeError: Cannot read property '_internalModel' of undefined
at finders.js:50
at Object.Backburner.run (ember.debug.js:224)
at ember$data$lib$system$store$$Service.extend._adapterRun (store.js:2043)
at finders.js:45
at tryCatch (ember.debug.js:56151)
at invokeCallback (ember.debug.js:56166)
at publish (ember.debug.js:56134)
at ember.debug.js:32577
at Queue.invoke (ember.debug.js:910)
at Object.Queue.flush (ember.debug.js:974)onerrorDefault @ ember.debug.js:32616exports.default.trigger @ ember.debug.js:56792Promise._onerror @ ember.debug.js:57758publishRejection @ ember.debug.js:56065(anonymous function) @ ember.debug.js:32577Queue.invoke @ ember.debug.js:910Queue.flush @ ember.debug.js:974DeferredActionQueues.flush @ ember.debug.js:770Backburner.end @ ember.debug.js:160Backburner.run @ ember.debug.js:228run @ ember.debug.js:20238ember$data$lib$system$adapter$$default.extend.ajax.Ember.RSVP.Promise.hash.success @ rest-adapter.js:831jQuery.Callbacks.fire @ jquery.js:3148jQuery.Callbacks.self.fireWith @ jquery.js:3260done @ jquery.js:9314jQuery.ajaxTransport.send.callback @ jquery.js:9718

任何建议将不胜感激

更新
我以为这是一个bug,所以我继续在ember-data github repo上记录一个bug,在一个小时左右的时间内得到了@wecc的回复( NICE
https://github.com/emberjs/data/issues/3683

所以要解决这个问题,我写了自己的序列化程序。

So to fix this issue, I wrote my own serializer.

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
normalizePayload: function(payload) {
    return {
        'job': {
            id: '9e5ce869-89b3-4bfc-a70f-034593c21eae',
            status: payload.status,
            result: payload.result
        }
    };

}
});

现在,它开始工作。

OPINION 我可以想到为什么他们以这种方式实现了默认的RESTSerializer,但是我们可能应该向用户提供有关ember数据文档的更多信息,否则,新手谁正在尝试使用它将丢失。

OPINION I can think of why they implemented the default RESTSerializer this way, but we probably should give more information to the users on the documentation of the ember-data, otherwise, newbie who is trying to use it will get lost.

推荐答案

1)您的服务器响应应该具有与模型相同名称的根元素。所以,对于单个对象,它应该是:

1) Your server response should have a root element with the same name, as model's. So, for single object it shuld be:

{
    "job": {
        "id": "<backend must provide an id, integer preferred>"
        "status": "OK",
        "result": {
            "b": 2,
            "a": 2,
            "see": 1,
            "c": 1
        }
}

对于多个对象:

{
    "jobs": [{
        "id": "<backend must provide an id, integer preferred>"
        "status": "OK",
        "result": {
            "b": 2,
            "a": 2,
            "see": 1,
            "c": 1
        }, {/*next object*/}]
}

这篇关于ember数据没有找到属性名称的模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆