3

次のコードを使用して、.netWebAPIから返されたJSONをノックアウトビューモデルにバインドできます。

function viewModel() {
    var self = this;
    self.temps = ko.observableArray([]);
}

$(function () { 
    var model = new viewModel();

    $.get('../api/Temp/', function (data) { 
        model.temps(data);
    });

    ko.applyBindings(model);       

});

Ryan Niemeyerのマッピング例を使用ko.utils.parseJsonしようとすると、返されたJsonで使用するとnullになり、ko.utils.arrayMap直接使用しようとすると未定義になります。

また、次のことを試してみると、getリクエストを別の関数に取り込むのに苦労しています。データバインディングが機能しなくなります。

function dataFromServer() {
    $.get('../api/Temp/', function (data) { 
        return data;
    });
}

$(function () { 
    var model = new viewModel();
    var data = dataFromServer();
    model.temps(data);

    ko.applyBindings(model);       

});

サーバーから返されたJSON:

[{"Id":1,"Name":"Test1","TypeId":100,"Temp":21.0,"Peak":true},{"Id":2,"Name":"Test2","TypeId":100,"Temp":21.0,"Peak":true},{"Id":3,"Name":"Test3","TypeId":101,"Temp":21.0,"Peak":true}]
4

1 に答える 1

1

AJAX 呼び出しは非同期であるため、ここで関数からすぐにデータを返すことはありません。

$.get('../api/Temp/', function (data) { 
        return data;
    });

次のように、結果を書き込みたい observable/observableArray を関数に渡したい場合があります。

function dataFromServer(temps) {
    $.get('../api/Temp/', function (data) { 
        return temps(data);
    });
}

次に、次のように呼び出します。

var model = new viewModel();
dataFromServer(model.temps);
于 2012-08-29T13:36:46.503 に答える