Javascript 在viewmodel构造函数中使用Knockoutjs映射插件
我正在尝试在构造函数中使用映射插件,以便可以轻松地向构造函数添加其他函数,并从映射插件自动创建可观察项。这是我目前拥有的代码,但它既没有映射我提供的可观察变量,也没有在end viewmodel中包含“save”函数。有更好的方法吗Javascript 在viewmodel构造函数中使用Knockoutjs映射插件,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我正在尝试在构造函数中使用映射插件,以便可以轻松地向构造函数添加其他函数,并从映射插件自动创建可观察项。这是我目前拥有的代码,但它既没有映射我提供的可观察变量,也没有在end viewmodel中包含“save”函数。有更好的方法吗 function ViewModel(model){ var self = this; self = ko.mapping.fromJS(model); self.save = function() {
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
函数扩展的对象
但是,此新对象不是从构造函数返回的,因此您将以空对象结束,因为最初传入的未修改此
您可以通过从构造函数返回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;
};
或者,您可以告诉映射插件不要创建新对象,只使用当前创建的对象,并将passingself
作为第三个参数:
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
});
}
};
您的代码无法工作,因为
ko.mapping.fromJS(model)
返回一个新对象,该对象是您分配给self
局部变量的对象,该对象是您使用save
函数扩展的对象
但是,此新对象不是从构造函数返回的,因此您将以空对象结束,因为最初传入的未修改此
您可以通过从构造函数返回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;
};
或者,您可以告诉映射插件不要创建新对象,只使用当前创建的对象,并将passingself
作为第三个参数:
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。映射为您创建
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);
没有理由使用构造函数(使用new
)。您不会创建多个实例或拥有一个原型。只需使用对象ko。映射为您创建
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.\u save=函数(){
}
另外,save是一个私有方法,编写save如下:
self.\u save=函数(){
}
我知道这是件小事,谢谢你的帮助。我知道这是件小事,谢谢你的帮助。