使用knockout js重新绑定json对象

时间:2013-02-20 23:42:08

标签: asp.net-mvc knockout.js knockout-mapping-plugin

我正在使用asplnet mvc与knockout和jquery一起工作。我在控制器中返回的json对象中使用knockout应用绑定。这适用于我的标记。

如果用户点击屏幕上的按钮,我会调用控制器操作并再次从服务器检索数据。

此时,我是否需要重新绑定我的新json对象以进行淘汰或如何处理?

1 个答案:

答案 0 :(得分:0)

我假设当用户单击按钮并调用控制器操作时,您将这样做作为AJAX回发而不是整页刷新。如果这是正确的,那么不,您不需要重新绑定新的json对象。你只需要使用你的新json对象来更新你的视图模型,淘汰赛将负责其余部分。它的工作方式如下:

当您的页面最初加载时,您的页面会从控制器返回一个javascript对象。如果将此对象转换为相应的对象,其中所有属性都是knockout observables和observableArrays,则在应用knockout绑定后,您可以获得持久的双向数据绑定(即从模型到页面以及从页面到模型)

将javascript对象转换为所有属性为knockout observable的最简单方法是使用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调用并检索新数据时,当您更新ViewModel时,knockout会自动更新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

更新视图模型后,由于knockout的双向数据绑定,UI将自动刷新。所以你只需要更新你的viewmodel,knockout将自动应用它的绑定并负责更新UI。