1

(「foreach」バインディングを使用して) 配列を戻すときに ko.mapping が正常に機能している理由がわかりませんが、(「with」バインディングを使用して) 単一のオブジェクトである場合は機能しません。まったく。エラーは発生しませんが、結果も得られません。

function EventViewModel() {
    var self = this;
    self.events = ko.observableArray([]);
    self.singleEvent = ko.observable({});

    self.getEvents = function () {
        self.events.removeAll();
        $.ajax("/api/Event/", {
            contentType: "application/json",
            success: function (allData) {
                ko.mapping.fromJS(allData, null, self.events);
            }
        });
    }    
    self.getSingleEvent = function () {
        self.events.removeAll();
        $.ajax("/api/Event/?guid=435a666b-7913-417f-a474-dfb33d74c2ec", {
            contentType: "application/json",
            success: function (allData) {
                ko.mapping.fromJS(allData, null, self.singleEvent);
            }
        });
    }

    self.getEvents();
    self.getSingleEvent();
};
window.vm = new EventViewModel();
ko.applyBindings(vm);

getSingleEvent() の結果を配列に押し込んで、次のように「foreach」を再度使用できます。

ko.mapping.fromJS([allData], null, self.singleEvent);

そして、singleEvent を observableArray にします。これは機能しますが、私にはチートのように思えます。

getEvents() からの JSON は次のようになります。

[{"EventId":4,"Year":2013,"StartDate":"2013-08-28T00:00:00","EndDate":"2013-09-02T00:00:00","EventGuid":"435a666b-7913-417f-a474-dfb33d74c2ec"},{"EventId":5,"Year":2013,"StartDate":"2013-06-07T00:00:00","EndDate":"2013-06-09T00:00:00","EventGuid":"615014ba-15cd-4371-8d43-04d66eb558a2"}]

getSingleEvent() からの JSON は次のようになります。

{"EventId":4,"Year":2013,"StartDate":"2013-08-28T00:00:00","EndDate":"2013-09-02T00:00:00","EventGuid":"435a666b-7913-417f-a474-dfb33d74c2ec"}
4

1 に答える 1

1

ko.mapping がオブジェクトを観測可能にしないことは確かです。代わりに、オブジェクトの各プロパティを監視可能にします。一方、self.singleEvent(allData)オブザーバブルを設定するためだけに行うことを妨げるものは何もありません。

于 2013-04-19T03:37:08.557 に答える