口是心非可以在很大程度上通過以下方法降低:
@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
實用程序功能。
爲什麼你認爲你目前的ViewModels不能與KnockoutJS一起使用? – haim770
我以爲我必須爲ASP.NET MVC創建一個ViewModel,而且還需要在JS中爲KnockoutJS創建一個ViewModel?但正如下面的@twoflower建議,我可以刪除這種重複。 – teh0wner
實際上,當你使用KO時,你實際上經常不需要MVC視圖模型,你可以直接使用域實體 – Anders