2012-12-10 41 views
0

所以我想嘗試將它們添加到集合之前,從一個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(); 
    } 
     );  
    } 
當用戶進入到展示的產品類型頁

變量它運行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; 

現在這行不通,因爲它this.productTypesArray是未定義的,如果我CONSOLE.LOG它。 (我該怎麼得到這個?)

我會想我需要通過並添加每個新的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

我想這意味着我可以傳遞一個數組到集合中,而不必添加每個productType?

是的,你可以傳遞一個數組到collection's constructor,它會爲你創建模型。

至於你的緩存代碼,它看起來像這個問題是在這裏:

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

回調語句的參數丟失this - 應該是return callback(this.cachedProductTypes)