Javascript 将额外数据传递到主干集合获取--返回未定义的数据?
假设我有一个名为index的主干路由,它从服务器获取一个集合:Javascript 将额外数据传递到主干集合获取--返回未定义的数据?,javascript,ajax,backbone.js,express,Javascript,Ajax,Backbone.js,Express,假设我有一个名为index的主干路由,它从服务器获取一个集合: var characters = new App.Collections.Characters(); characters.fetch({ success: function(data) { var homeView = new App.Views.Home({ collection: new Backbone.Collection(data) });
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
现在,如果我要在两个字符之外包含一个字符,而不是传递一个对象:
res.send({ nonce: randomString, characters: characters.slice(counter, counter+2);
在执行以下操作时,我无法再访问字符或nonce:
// the same fetch function from above
success: function(data) {
console.log(data.nonce); // undefined
console.log(data.characters); // undefined
}
骨干收藏公司在幕后做些不光彩的事吗?为什么我不能从从服务器传递的集合获取的成功对象访问对象属性
更新:
以下是在第一种情况下向集合发送简单数组时的控制台输出:
下面是当我按照@matt2000的建议发送数据,然后在主干网中调用它,作为data.models[0].attributes.characters代码>:
传递给成功回调的数据应该是一个对象数组。我想你的意思是:
res.send([{ nonce: randomString, characters: characters.slice(counter, counter+2]);
以及:
传递给成功回调的数据应该是一个对象数组。我想你的意思是:
res.send([{ nonce: randomString, characters: characters.slice(counter, counter+2]);
以及:
主干在引擎盖下有点神奇。将作为第一个参数传递给success
回调的不是服务器提供的原始数据,而是解析的集合()
您可以覆盖集合的默认parse
方法,以便从服务器的响应中获取数组
var Characters = Backbone.Collection.extend({
url : //REST access point
parse : function( response ) {
this.nonce = response.nonce;
// Anything returned by this function will be used as the first argument to
// construct the collection.
return response.characters;
}
});
您现在可以在获取时直接使用characters实例,而不必使用它的结果创建新集合
var characters = new Characters();
characters.fetch({
success: function( collection ) {
var homeView = new App.Views.Home({
collection: collection
});
$('#content').html(homeView.render().el);
}
});
主干在引擎盖下有点神奇。将作为第一个参数传递给success
回调的不是服务器提供的原始数据,而是解析的集合()
您可以覆盖集合的默认parse
方法,以便从服务器的响应中获取数组
var Characters = Backbone.Collection.extend({
url : //REST access point
parse : function( response ) {
this.nonce = response.nonce;
// Anything returned by this function will be used as the first argument to
// construct the collection.
return response.characters;
}
});
您现在可以在获取时直接使用characters实例,而不必使用它的结果创建新集合
var characters = new Characters();
characters.fetch({
success: function( collection ) {
var homeView = new App.Views.Home({
collection: collection
});
$('#content').html(homeView.render().el);
}
});
最好的办法是检查控制台是否有任何错误。然后检查网络请求,看看响应看起来如何。success
回调的第一个参数只是集合本身,而不是服务器发送的数据。@Loamhoof,这才有意义。除了收集之外,我还有哪些选项可以获取服务器发送的数据?@twillightponyinc。也许可以尝试使用parse
方法。如果您需要更深入地了解响应
对象,我想您必须深入研究jQuery XHR方法。最好的办法是检查控制台是否有任何错误。然后检查网络请求,看看响应看起来如何。success
回调的第一个参数只是集合本身,而不是服务器发送的数据。@Loamhoof,这才有意义。除了收集之外,我还有哪些选项可以获取服务器发送的数据?@twillightponyinc。也许可以尝试使用parse
方法。如果您需要深入研究响应
对象,那么我想您必须深入研究jQuery XHR方法。谢谢。这个方法对我有效,所以我接受这个答案。谢谢。这个方法对我很有效,所以我接受这个答案。