我的问题在于我认为的解析函数:
/*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();
});
答案 0 :(得分:1)
查看客户端(例如sync
或fetch
实际驻留的位置)会很有帮助,但我会尝试以下方法:
函数parse
将作为参数response
并将其返回。
response
是服务器返回的任何内容JSON
。
Backbone
模型不仅仅是其JSON
表示;它包装JSON
并赋予它更多功能(例如idAttribute
)。
因此,通过返回response
,您只需返回一些数组(基于您发布的response
)。
我不会使用parse
,而是让默认方法执行任何操作,因为看起来response
已经准备好进行解析了。
我要做的是首先从define
和Article
的{{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)
这是否澄清了事情?