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;

これは、console.log の場合、this.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 を追加する必要がないことを意味していると思いますか?

4

1 に答える 1

1

これは、配列をコレクションに渡すだけで、各 productType を追加する必要がないことを意味していると思いますか?

はい、配列をコレクションのコンストラクターに渡すことができます。これにより、モデルが作成されます。

キャッシュ コードに関する限り、問題は次のように見えます。

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

コールバック ステートメントの引数がありませthisん - である必要がありますreturn callback(this.cachedProductTypes)

于 2012-12-10T01:00:53.920 に答える