Я использую KnockoutJS и плагин отображения для создания пользовательского интерфейса. Когда страница загружается, она немедленно вызывает:KnockoutJS Вложенное сопоставление
$('document').ready (function() {
$.getJSON(some-url, function (data) {
viewModel = new ViewModel(data);
ko.applyBindings(viewModel);
});
});
Это отлично работает. Служба в каком-URL отвечает значение JSON формы:
{ current: null
, ids: [0,1,2,3,4,5]
}
И я создал метод в моем классе ViewModel, который предполагается заполнить текущие наблюдаемый, на основе первого идентификатора в массиве:
self.head = function() {
if (self.promptIds().length != 0) {
var nextId = _.head(self.promptIds());
self.promptIds(_.tail(self.promptIds()));
$.getJSON("some-url" + "/" + nextId, function (data) {
self.current = ko.mapping.fromJS(data);
});
}
}
Обратите внимание, что я устанавливаю self.current
равным результату делать ko.mapping. Поэтому я в значительной степени переписываю предыдущие наблюдаемые там. И это объясняет, почему мои привязки не обновляются, хотя определено значение self.current
.
Так как же я могу обновить только viewModel.current
? Все, что я хочу, это разобрать ответ на запрос ajax и сделать его под-viewModel.
Когда я делаю это, я в конечном итоге, поставить скобки после self.current для доступа к полям суб-объекта:. Self.current() Foo(). Это будет работать, но мне интересно, есть ли лучший способ. – nomen