2014-06-02 1 views
0

Я использую 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.

ответ

2

Я думал его:

self.current(ko.mapping.fromJS(data)); 
+0

Когда я делаю это, я в конечном итоге, поставить скобки после self.current для доступа к полям суб-объекта:. Self.current() Foo(). Это будет работать, но мне интересно, есть ли лучший способ. – nomen