[英]Using Knockoutjs Mapping Plugin inside viewmodel constructor
我試圖在構造函數中使用映射插件,以便可以輕松地向構造函數添加其他功能,並從該映射插件自動創建可觀察的項目。 這是我當前擁有的代碼,但既沒有映射我提供的可觀察變量,也沒有在最終viewmodel中包含“保存”功能。 有一個更好的方法嗎?
function ViewModel(model){
var self = this;
self = ko.mapping.fromJS(model);
self.save = function() {
var data = ko.toJSON(self);
$.post("/Licensing/edit", data, function(returnedData) {
// This callback is executed if the post was successful
});
}
};
var vm = new ViewModel(model);
ko.applyBindings(vm);
您的代碼無法正常工作,因為ko.mapping.fromJS(model);
返回一個新對象,該對象將您分配給self
局部變量,並使用save
函數進行擴展。
但是,此新對象不是從構造函數中返回的,因此您將以一個空對象結尾,因為最初傳遞給this
的未修改。
您可以通過從構造函數返回self
來解決此問題:
function ViewModel(model){
var self = this;
self = ko.mapping.fromJS(model);
self.save = function() {
var data = ko.toJSON(self);
$.post("/Licensing/edit", data, function(returnedData) {
// This callback is executed if the post was successful
});
}
return self;
};
或者,您可以告訴映射插件不要創建新對象,只需使用當前創建的對象並將self
作為第三個參數傳遞即可:
function ViewModel(model){
var self = this;
ko.mapping.fromJS(model, {}, self);
self.save = function() {
var data = ko.toJSON(self);
$.post("/Licensing/edit", data, function(returnedData) {
// This callback is executed if the post was successful
});
}
};
沒有理由使用構造函數(使用new
)。 您不會制作多個實例或擁有一個原型。 只需使用ko.mapping
為您創建的對象。
function ViewModel(model){
var self = ko.mapping.fromJS(model);
self.save = function() {
var data = ko.toJSON(self);
$.post("/Licensing/edit", data, function(returnedData) {
// This callback is executed if the post was successful
});
}
return self;
};
var vm = ViewModel(model);
ko.applyBindings(vm);
另外save是一個私有方法,這樣寫save:
self._save = function(){}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.