无法读取属性' idAttribute'解析后执行的未定义

时间:2015-08-06 11:24:03

标签: javascript backbone.js

我的问题在于我认为的解析函数:

/*global define */
define([
    'jquery',
    'underscore',
    'backbone',
    'models/article'
], function ($, _, Backbone, Article) {
    'use strict';

    var Articles = Backbone.Collection.extend({
        model: Article,
        url: "http://127.0.0.1:3000/posts",

        initialize: function() {
        },

        parse: function(response) {
            return response;
        }
    });

    return new Articles();
});

执行解析函数后出现此错误:

Uncaught TypeError: Cannot read property 'idAttribute' of undefined

例如,当我设置return response.somthing;而不是回复;没有错误信息。

这是响应对象:

[
    {
      "name": "test",
      "description": "test",
      "price": 0,
      "category": "test",
      "id": 0
    },
    {
      "name": "test",
      "description": "test",
      "price": 0,
      "category": "test",
      "id": 1
    },
    {
      "name": "test",
      "description": "test",
      "price": 0,
      "category": "test",
      "id": 2
    },
]

这是我的模型声明:

define([
    'jquery',
    'underscore',
    'backbone'
], function ($, _, Backbone) {
    'use strict';

    var Article = Backbone.Model.extend({

        defaults: {
            name: '',
            description: '',
            price: 0,
            category: ''
        },

        initialize: function() {
        }

    });

    return new Article();
});

1 个答案:

答案 0 :(得分:1)

查看客户端(例如syncfetch实际驻留的位置)会很有帮助,但我会尝试以下方法:

函数parse将作为参数response并将其返回。

response是服务器返回的任何内容JSON

Backbone模型不仅仅是其JSON表示;它包装JSON并赋予它更多功能(例如idAttribute)。

因此,通过返回response,您只需返回一些数组(基于您发布的response)。

我不会使用parse,而是让默认方法执行任何操作,因为看起来response已经准备好进行解析了。

我要做的是首先从defineArticle的{​​{1}} d模块中返回类型而不是实例:

Articles

models/article.js

在您的收藏定义中

return Article; // not return new Article;

现在,来自您的客户:

return Articles; // not return new Articles;

您获取该集合:

var articlesCollection = new Articles();

当你这样做时,默认情况下你会有以下几种模型:

<强> articlesCollection.fetch({ success: function(collection, response) { // now collection is a reference to articlesCollection and it will have models in it collection.models }, error: function(collection, response) { }

collection.at(0)

这是否澄清了事情?