所以我在尝试将它们添加到集合中之前尝试存储json文件中的产品类型但是得到了一些奇怪的结果(如我不完全理解)
在我的路由器页面上,我为缓存产品和产品类型设置了一个变量
cachedProductTypes: null,
productType : {},
products : {},
getProductTypes:
function(callback)
{
if (this.cachedProductTypes !== null) {
return callback(cachedProductTypes);
}
var self = this;
$.getJSON('data/product.json',
function(data)
{
self.cachedProductTypes = data;
callback(data);
}
);
},
parseResponse : function(data) {
result = { prodTypes: [], products: [] };
var type;
var types = data.data.productTypeList;
var product;
var i = types.length;
while (type = types[--i]) {
result.prodTypes.push({
id: type.id,
name: type.name,
longName: type.longName
// etc.
});
while (product = type.productList.pop()) {
product.productTypeId = type.id,
result.products.push(product);
}
};
this.productType = result.prodTypes;
console.log( "dan");
this.products = result.products;
},
showProductTypes:function(){
var self = this;
this.getProductTypes(
function(data)
{
self.parseResponse(data);
var productTypesArray = self.productType;
var productList=new ProductsType(productTypesArray);
var productListView=new ProductListView({collection:productList});
productListView.bind('renderCompleted:ProductsType',self.changePage,self);
productListView.update();
}
);
}
当用户进入show product types页面时,它运行showProductsType函数
所以我将产品类型数组传递给我的集合
收藏页面上的
var ProductsType=Backbone.Collection.extend({
model:ProductType,
fetch:function(){
var self=this;
var tmpItem;
//fetch the data using ajax
$.each(this.productTypesArray, function(i,prodType){
tmpItem=new ProductType({id:prodType.id, name:prodType.name, longName:prodType.longName});
console.log(prodType.name);
self.add(tmpItem);
});
self.trigger("fetchCompleted:ProductsType");
}
});
return ProductsType;
现在这不起作用,因为如果我控制它,那么.productTypesArray是未定义的。 (我怎么能得到这个?)
我原本以为我需要经历并添加每个新的ProductType。
奇怪的一点 - 如果我只有代码
var ProductsType=Backbone.Collection.extend({
model:ProductType,
fetch:function(){
var self=this;
var tmpItem;
//fetch the data using ajax
self.trigger("fetchCompleted:ProductsType");
}
});
return ProductsType;
它实际上是将产品添加到集合中?我想这意味着我可以将一个数组传递给集合,而不必添加每个productType?
答案 0 :(得分:1)
我想这意味着我可以将数组传递给集合而不必添加每个productType?
是的,您可以将数组传递给collection's constructor,它会为您创建模型。
就你的缓存代码而言,问题就在这里:
if (this.cachedProductTypes !== null) {
return callback(cachedProductTypes);
}
缺少回调语句的参数this
- 应为return callback(this.cachedProductTypes)
。