Я бы перестроил ваш код для другого потока.
первый - определите ваши данные один раз.
viewAlertsModel.alerts = ko.observable();
Во-вторых, свяжите свои данные
ko.applyBindings(viewAlertsModel,$("#alertedEventsContainer")[0]);
В-третьих, теперь работайте со своими данными
$.getJSON("/Calendar/MyEvents/", {},
function (data) {
ko.mapping.fromJS(data, viewAlertsModel.alerts);
});
Шаги 1 и 2 можно выполнить на этапе инициализации. Ключ здесь сначала определяется viewAlertsModel.alerts
как наблюдаемый.
Шаг третий - ваш код времени выполнения. Теперь ваш код инициализации полностью отделен от кода времени выполнения. Это более нормальный стиль нокаута.
редактировать
Что касается ваших комментариев об использовании ko-mapping, я использую следующий код
var tempVar = ko.mapping.fromJS(data);
viewAlertsModel.alerts(tempVar); // !important - do not use = operator.
Это соглашение, которым пользуется большинство людей. Ваше использование ko-mapping обычно используется для специализированных ситуаций.