将数据传递到骨干中的集合

时间:2012-12-10 00:52:25

标签: backbone.js

所以我在尝试将它们添加到集合中之前尝试存储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?

1 个答案:

答案 0 :(得分:1)

  

我想这意味着我可以将数组传递给集合而不必添加每个productType?

是的,您可以将数组传递给collection's constructor,它会为您创建模型。

就你的缓存代码而言,问题就在这里:

if (this.cachedProductTypes !== null) {
    return callback(cachedProductTypes);
}

缺少回调语句的参数this - 应为return callback(this.cachedProductTypes)