2013-02-20 2 views
1

Я работаю с нокаутом и jquery с asplnet mvc. Я применяю привязки, используя нокаут из объекта json, возвращаемого в контроллер. Это применяется к моей разметке.rebinding json object with knockout js

Если пользователь нажимает кнопку на экране, я делаю вызов действия контроллера и снова извлекаю данные с сервера.

На этом этапе мне нужно переустановить мой новый объект json для нокаута или как его обрабатывать?

ответ

0

Я предполагаю, что когда пользователь нажимает кнопку и выполняет вызов действия контроллера, вы делаете это как обратный вызов 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 обновляется, интерфейс будет автоматически обновляться благодаря, чтобы нокаутировать двухстороннюю привязку данных. Поэтому вам просто нужно обновить свою модель просмотра, а нокаут автоматически применит привязки и позаботится об обновлении пользовательского интерфейса.