通过以下方法可以在很大程度上减少重复性:
@model ViewModel
<script src="@Url.Content("~/Scripts/knockout.mapping-latest.js")" type="text/javascript"></script>
...
<script type="text/javascript">
function ViewModel(initData) {
var self = this;
ko.mapping.fromJS(initData, {}, self);
// Add custom view model logic
...
// Logic for persisting the current state of the model back to the server
self.Save = function() {
$.ajax('/model-uri', {
type: 'POST',
contentType: "application/json",
data: ko.toJSON(self)
});
};
var initialData = @(Html.Raw(JsonConvert.SerializeObject(Model)));
var model = new ViewModel(initialData);
ko.applyBindings(model);
</script>
请注意,我们将服务器提供的视图模型序列化为 JavaScript 对象,然后使用ko.mapping
插件使其属性可观察,这样我们就无需在客户端复制视图模型定义。ko.toJSON
在将更新的模型发送回服务器时,我们还使用了效用函数。