Преобразуване на Knockout.JS към observable срещу observableArray

Не мога да разбера защо моето ko.mapping работи добре, когато връщам масив (използвайки обвързването „foreach“), но когато е един обект (използвайки обвързването „с“), не работи изобщо. Не получавам никакви грешки, но също така не получавам никакви резултати:

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, което работи, но ми изглежда като измама.

JSON от getEvents() изглежда така:

[{"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"}]

и JSON от getSingleEvent() изглежда така:

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

person Mike Thibault    schedule 19.04.2013    source източник
comment
Как изглеждат JSON данните, които се връщат от вашия API? Това ще определи получения тип обект на Javascript.   -  person Justin Helgerson    schedule 19.04.2013
comment
Току-що редактирах оригиналната публикация с JSON проби   -  person Mike Thibault    schedule 19.04.2013


Отговори (1)


Напълно съм сигурен, че ko.mapping не прави обектите видими. Вместо това прави всяко от свойствата на даден обект видимо. От друга страна, нищо не ви спира просто да направите self.singleEvent(allData), за да зададете наблюдаемото.

person Michael Best    schedule 19.04.2013
comment
Това ме отведе по правилния път; self.singleEvent(ko.mapping.fromJS(allData)); в успеха на getSingleEvent() свърши работа! Благодаря! - person Mike Thibault; 19.04.2013