5

JSON データを返してオブザーバブルに変換するのに苦労しています。データは JSON 形式で正常に返されますが、オブザーバブルに割り当てられていないようです。誰でも助けることができますか?問題は ajax 呼び出しの成功部分にあると推測しています:

<script type="text/javascript">

function StandingsViewModel() {
    var self = this;

    self.standings = ko.observableArray();

    self.DivisionName = ko.observable('');

    self.afceast = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "AFC East" == i.DivisionName;
        });
    });

    self.afccentral = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "AFC Central" == i.DivisionName;
        });
    });

    self.afcwest = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "AFC West" == i.DivisionName;
        });
    });

    self.nfceast = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "NFC East" == i.DivisionName;
        });
    });

    self.nfccentral = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "NFC Central" == i.DivisionName;
        });
    });

    self.nfcwest = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "NFC West" == i.DivisionName;
        });
    });

    $.ajax({
        dataType: "json",
        url: "/api/standing/GetStandingsBySeason/2018",
        beforeSend: function (xhr) {
            $('#divStandings').html('');
            $('#divStandings').addClass('ajaxRefreshing');
            xhr.setRequestHeader('X-Client', 'jQuery');
        },
        success: function (result) {
            $('#divStandings').removeClass('ajaxRefreshing');
            self.standings(JSON.parse(result));
        }
    });
}

$(document).ready(function () {
    ko.applyBindings(new StandingsViewModel());
});

</script>
4

2 に答える 2

12

Knockout Mappingプラグインを使用して、結果を観測可能なものにマップする必要があります。

var observableData = ko.mapping.fromJS(result);

または、オブジェクトが jQuery によって自動的に解析されなかった場合

var observableData = ko.mapping.fromJSON(result);

データ型が配列の場合、observableArray へのコンバーターになるため、アイテムを通常の配列として取得するには、角かっこを追加して他の観測可能なものと同様に取得する必要があります。

var array = observableData();

その配列は、次の方法で obsevableArray に割り当てることができます。

self.standings(array);
于 2013-02-24T13:38:39.647 に答える
1

Knockout のマッピング プラグインを使用する代わりのオプションは、Knockbackを使用することです。Knockout とBackboneの間のブリッジです。

次のように簡単にデータを取得できます。

//Model
var StandingsModel = Backbone.Collection.extend({ 
    url:'/api/standing/GetStandingsBySeason/2018' 
});

//View model
var StandingsViewModel = function (standings) {
    this.standings = kb.collectionObservable(standings)
    //...
};

$(document).ready(function () {
    //Get data from server
    var model = new StandingsModel();
    model.fetch( function() {
        success: //...
    });

    //Apply bindings
    ko.applyBindings(new StandingsViewModel(model));
});
于 2013-02-24T19:27:56.940 に答える