2

JSON情報を取得するための基本的にAJAX投稿である動的モデルからObservableArrayを作成したいと思います。次に、その配列をテーブルに追加します。

これがViewmodelを作成するための私の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>

それを私の配列に追加したくないようです。アドバイスをいただければ幸いです。

よろしくジャック

4

2 に答える 2

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>データバインディングの式では大文字と小文字が区別されます)

修正を含むコードを使ってフィドルを作成しました。

于 2012-12-05T06:08:21.680 に答える
0

ko.mapping.fromJSの代わりにko.mapping.fromJSONを使用する必要がありますか?

于 2012-12-05T06:07:58.683 に答える