2012-12-05 20 views
2

我想從動態模型創建一個Observable數組,它基本上是一個AJAX帖子來獲取JSON信息。然後我想將該數組添加到表中。KnockoutJS映射模型添加到Observable數組

這裏是我的JavaScript來創建視圖模型,什麼是假設添加到陣列:

var ProductViewmodel; 
    function bindProductModel(Products) { 
     var self = this; 
     self.items = ko.mapping.fromJS([]); 
     ProductViewmodel = ko.mapping.fromJS(Products, self.items); 
     console.log(ProductViewmodel); 
     ko.applyBindings(ProductViewmodel); 
    } 

    function JSONProducts() { 
     $.ajax({ 
      url: "WebForm1.aspx/AvailibleProducts", 
      // Current Page, Method 
      data: '{Warehouse: 1}', 
      // parameter map as JSON 
      type: "POST", 
      // data has to be POSTed 
      contentType: "application/json; charset=utf-8", 
      // posting JSON content  
      dataType: "JSON", 
      // type of data is JSON (must be upper case!) 
      timeout: 10000, 
      // AJAX timeout 
      success: function (result) { 
       bindProductModel(result); 
      }, 
      error: function (xhr, status) { 
       alert(status + " - " + xhr.responseText); 
      } 
     }); 
    } 

的JSON的獲得完美的作品:

{ 
"d": [ 
    { 
     "__type": "Warehouse.Tracntrace.Members_Only.StockMovement.ProductStagingMethod", 
     "ProductSKUID": 2, 
     "ProductSKUName": "Decoder 1131", 
     "WarehouseID": 1, 
     "WarehouseName": "SoftwareDevelopmentTest", 
     "SystemAreaName": "Staging", 
     "Qty": 5 
    } 
] 

}

和這裏是我嘗試將數據綁定到我的表的地方:

<div id="TableContainer" class="gridview"> 
    <table border="1" cellpadding="0" cellspacing="0"> 
    <tbody data-bind="foreach: ProductViewmodel"> 
     <tr> 
     <td data-bind="text: ProductSKUID"></td> 
     <td data-bind="text: ProductSKUName"></td> 
     <td data-bind="text: WarehouseID"></td> 
     <td data-bind="text: WarehouseName"></td> 
     <td data-bind="text: SystemAreaName"></td> 
     <td data-bind="text: QTY"></td> 

     </tr> 
     </tbody> 
    </table> 
</div> 

看來它不想將它添加到我的數組中。 任何意見將不勝感激。

問候 雅克

回答

1

你有3個問題,你的代碼:

  1. data-bind="foreach: ProductViewmodel"嘗試的foreach對整個ProductViewmodel但你需要做的items。因此,請將其更改爲<tbody data-bind="foreach: items">
  2. 您的json對象包裝在d屬性中,因此您需要在映射中處理它。所以你需要寫:ProductViewmodel = ko.mapping.fromJS(Products.d, self.items);
  3. 你輸入了錯誤的Qty屬性名稱。正確的綁定是:<td data-bind="text: Qty"></td>(數據綁定表達式是區分大小寫)

我已經created a fiddle與您的代碼包含的修補程序。

+0

你先生!是一個紳士和Scholor –

0

你需要使用ko.mapping.fromJSON代替ko.mapping.fromJS?

+0

我試過ko.mapping.fromJSON,它似乎不適合我。但總是樂意給它第二次去。 –