14 javascript rest jquery backbone.js
我正在尝试从我的服务器获取一个集合.我正在使用版本0.3.3(不是github的主人)但是我在这个例外中运行:
Uncaught TypeError: Cannot use 'in' operator to search for 'id' in {id=MyId, active=true}
jQuery.jQuery.extend._Deferred.deferred.resolveWith (jquery.js:869)
done (jquery.js:6591)
jQuery.ajaxTransport.send.callback
Run Code Online (Sandbox Code Playgroud)
这是我创建错误的方式:
var MyModel = Backbone.Model.extend();
var MyCollection = Backbone.Collection.extend({
url: '/api/collection',
model: MyModel
});
var coll = new MyCollection();
coll.fetch();
Run Code Online (Sandbox Code Playgroud)
/ api/collection中的元素在JSON中解析.我试图以各种格式返回它们
["Id1", "Id2", ... ]
[{id: "Id1, somethingElse: "..."}, ...]
{id1: { id1s content}, id2: { ... }, ...}
Run Code Online (Sandbox Code Playgroud)
但是错误总是一样的.这段代码有什么问题?
[编辑]通过coll.fetch({error: errorFunc});"异常"保持不变来设置错误没有帮助.
[Edit2]好吧,看起来一切正常,直到用响应对象collection.fetch()调用collection.refresh().我没有覆盖任何这些功能.
[Edit3]错误在collection.add()方法中,原因是我的元素是一个字符串列表...我的服务器发错了.
Vla*_*ich 23
由于您已经确定您的响应格式不是Backbone所期望的,因此您应该覆盖应该从服务器获取响应的YourModel.parse函数,并返回集合可接受的模型数组.以下是Backbone.js的片段
// **parse** converts a response into a list of models to be added to the
// collection. The default implementation is just to pass it through.
parse : function(resp) {
return resp;
},
Run Code Online (Sandbox Code Playgroud)
如您所见,默认函数只传递数据.您必须使其适用于您的响应格式.
PS id建议在Backbone.fetch方法中放置一个断点,以查看来自服务器的格式以及它在哪里打破模型创建.
小智 20
代替
["id1", "id2", ..., "idn"]
Run Code Online (Sandbox Code Playgroud)
客户期望
[{"id": "id1"}, ... {"id": "idn"}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32905 次 |
| 最近记录: |