【发布时间】:2013-06-24 05:51:19
【问题描述】:
假设我有一个名为 index 的主干路由,它从服务器获取集合:
var characters = new App.Collections.Characters();
characters.fetch({
success: function(data) {
var homeView = new App.Views.Home({
collection: new Backbone.Collection(data)
});
$('#content').html(homeView.render().el);
}
});
很简单吧?获取成功后,创建一个新视图并使用从服务器检索到的数据填充它。
这假设我只传递一个字符数组。在 Express 3.0 中:
res.send(characters.slice(counter, counter+2)); // array of 2 characters
现在,如果我要在这两个字符之外添加一个 nonce 并传递一个对象:
res.send({ nonce: randomString, characters: characters.slice(counter, counter+2);
当我这样做时,我无法再访问字符或随机数:
// the same fetch function from above
success: function(data) {
console.log(data.nonce); // undefined
console.log(data.characters); // undefined
}
Backbone Collection 是否在幕后做了一些阴暗的事情?为什么我不能从服务器传递的 collection fetch 的成功对象访问我的对象属性?
更新:
当我像第一种情况一样向我的集合发送一个简单数组时,控制台输出如下:
当我按照@matt2000 的建议发送数据然后在 Backbone 中将其称为data.models[0].attributes.characters; 时,它的外观如下:
【问题讨论】:
-
最好的办法是检查控制台是否有任何错误。然后检查网络请求,看看响应是什么样子的
-
success回调的第一个参数只是集合本身,而不是服务器发送的数据。 -
@Loamhoof 那是有道理的。除了收集之外,我还有哪些选择可以让服务器发送这些数据?
-
@TwilightPonyInc.试试
parse方法吧。如果您需要更深入地研究response对象,我猜您将不得不深入研究 jQuery XHR 方法。
标签: javascript ajax backbone.js express