2013-02-20 86 views
1

我正在與淘汰賽和jquery與asplnet mvc。我使用控制器中返回的json對象的knockout應用綁定。這是適用於我的標記。重新jin對象與淘汰賽js

如果用戶點擊屏幕上的按鈕,我會調用控制器操作並再次從服務器檢索數據。

在這一點上,我是否需要重新綁定我的新json對象來淘汰或如何處理?

回答

0

我假設當用戶單擊按鈕並調用控制器動作時,您將這樣做爲AJAX回發而不是整個頁面刷新。如果這是正確的,那麼不,你不需要重新綁定你的新的json對象。你只需要使用你的新的json對象來更新你的視圖模型,淘汰賽將負責其餘的部分。它的工作方式如下:

當您的頁面最初加載時,您的頁面有一個從控制器返回的javascript對象。如果這個對象變成一個對應的對象,其中所有的屬性都是knockout observables和observableArrays,那麼在應用knockout綁定之後,您可以獲得持續的雙向數據綁定(即從模型到頁面,從頁面到模型) 。

將您的JavaScript對象轉換爲其中所有屬性都是可敲擊的觀察對象的最簡單方法是使用knockout mapping plugin。完成此操作後,您將使用knockout 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調用時,新的數據被檢索到,當你更新視圖模型,淘汰賽將自動更新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 

一旦更新了視圖模型,UI將自動刷新,這要歸功於knockout的雙向數據綁定。所以你只需要更新你的視圖模型,淘汰賽將自動應用它的綁定並照顧更新UI。