Я предполагаю, что когда пользователь нажимает кнопку и выполняет вызов действия контроллера, вы делаете это как обратный вызов AJAX, а не как полное обновление страницы. Если это правильно, то нет, вам не нужно пересобирать новый json-объект. Вам просто нужно использовать свой новый json-объект, чтобы обновить вашу модель представления, а нокаут позаботится обо всем остальном. Способ его работы выглядит следующим образом:
Когда ваша страница изначально загружается, ваша страница имеет объект javascript, возвращенный с вашего контроллера. Если этот объект превращен в соответствующий объект, в котором все свойства являются нокаутируемыми наблюдаемыми и наблюдаемымиArrays, вы можете получить постоянную двустороннюю привязку данных (т. Е. От модели к вашей странице и от страницы к вашей модели) после применения привязок нокаута ,
Самый простой способ превратить ваш javascript-объект в объект, в котором все свойства являются нокаутируемыми наблюдаемыми, - использовать knockout mapping plugin. Как только вы это сделаете, вы привяжите его к своей странице с помощью метода нокаута applybindings.
Так на начальной странице загрузки, это может быть настроен следующим образом:
//load your data
var data = ... some code to retrieve your data
//convert this into a viewmodel having knockout observables as properties
MyPage.ViewModel = ko.mapping.fromJS(data);
//bind this viewmodel to all knockout bindings
ko.applyBindings(MyPage.ViewModel);
Теперь, когда вызов AJAX производится и новые данные извлекаются, когда вы обновляете ViewModel, Нокаут будет автоматически обновлять UI:
//AJAX call is made
var newdata = ... results from AJAX call
//Update viewmodel
MyPage.ViewModel.Property1(newdata.Property1);
MyPage.ViewModel.Property2(newdata.Property2);
...other properties...
...UI is automatically updated by knockout
После ViewModel обновляется, интерфейс будет автоматически обновляться благодаря, чтобы нокаутировать двухстороннюю привязку данных. Поэтому вам просто нужно обновить свою модель просмотра, а нокаут автоматически применит привязки и позаботится об обновлении пользовательского интерфейса.