我是Backbone.js的新手,我觉得我一定遗漏了一些非常基本的东西。我试图理解如何建立一个可以检索数据的模型/集合。为此,我示例化了一个模型/集合,然后立即调用fetch()以填充它(我知道引导第一个调用是最佳实践,但在fetch调用之后,它仍然处于Pending状态,而且我在fetch调用中的成功回调永远不会到达,因此模型永远不会得到任何数据。
下面是我的js代码:
var MyProducts = Backbone.Collection.extend({
url: contextPath + "/carousel.json"
});
var MyProductsCollection1 = Backbone.Collection.extend({
urlRoot: contextPath + "/carousel.json",
url: contextPath + "/carousel.json"
});
var MyProductsCollection2 = Backbone.Collection.extend({
url: contextPath + "/carousel.json"
});
var MyView = Backbone.View.extend({
render: function () {
console.log('this.collection');
console.log(this.collection);
return this;
}
})
var myProducts;
var myProductsCollection1;
var myProductsCollection2;
$(function () {
myProducts = new MyProducts();
myProducts.fetch({
success: function (model) {
var result = model.get("records");
}
});
myProductsCollection1 = new MyProductsCollection1();
myProductsCollection1.fetch({
success: function (model) {
var result = model.get("records");
}
});
myProductsCollection2 = new MyProductsCollection2();
myProductsCollection2.fetch({
success: function (model) {
var result = model.get("records");
}
});
var myView1 = new MyView({ collection: myProductsCollection1 });
var myView2 = new MyView({ collection: myProductsCollection2 });
console.log('view1');
myView1.render();
console.log('view2');
myView2.render();
});
下面是控制台输出,在我看来,它似乎表明fetch()调用没有检索到任何记录:
view1
this.collection
child {length: 0, models: Array[0], _byId: Object}
view2
this.collection
hild {length: 0, models: Array[0], _byId: Object}
在Network选项卡中,有3个对carousel.json的请求,但所有请求都显示为Status = pending,表明它们没有完成。
RESTapi的域与网站的域相同(我调用Spring控制器来检索视图和JSON),因此不应该存在任何跨域问题。
下面是Postman调用https://mydomain/mycontextdir/carousel.json的一些结果。(实际的结果集更长,但格式相同):
{
"records": [
{
"properties": [
{
"name": "pDefaultCatgroupID",
"value": "1000357"
},
{
"name": "highPriceFormatted",
"value": "$7.95"
},
{
"name": "REG_HIGH_PRICE",
"value": "7.950000"
}
]
},
{
"properties": [
{
"name": "REG_LOW_PRICE",
"value": "13.950000"
},
{
"name": "pItemID",
"value": "1254778"
}
]
}
],
"navigableFacets": null,
"refinmentFacets": null,
"breadcrumbs": [],
"content": null,
"totalRecords": 5868,
"navigationPath": [],
"searchReport": {
"fault": {
"hasFault": false,
"faultCommandName": null,
"faultCode": null,
"faultStatus": null,
"faultMessageKey": null,
"faultMessage": null,
"errors": null
},
"commerceId": null,
"loggedInCommerce": false,
"terms": null,
"autoSuggestion": null,
"profanity": false
}
}
我做错了什么,导致数据无法被检索?
非常感谢您的帮助!
1条答案
按热度按时间fhg3lkii1#
看起来您混淆了从模型中提取和从集合中提取(注意传递给success回调函数的参数的不同)当你在一个集合上调用fetch时,如果数据不符合格式,可以覆盖它parse函数来处理数据。因为你的json实际上是一个对象,而不是一个数组,所以你需要自己解析它。
所以在你的情况下你要做的是
这是jsbin的链接