Javascript 原型未定义
我试图控制在将数据发送回服务器之前应该序列化哪些数据。为此:Javascript 原型未定义,javascript,asp.net-mvc-4,knockout.js,Javascript,Asp.net Mvc 4,Knockout.js,我试图控制在将数据发送回服务器之前应该序列化哪些数据。为此: viewModel.prototype.toJSON = function () { var copy = ko.toJS(this); delete copy.QuoteListViewModel; return copy; }; 但原型是未定义的,它失败了 viewModel由mvcKnockout创建,确实存在,因为我可以执行以下操作: viewModel.QuoteSelectedViewModel = ko.o
viewModel.prototype.toJSON = function () {
var copy = ko.toJS(this);
delete copy.QuoteListViewModel;
return copy;
};
但原型是未定义的,它失败了
viewModel由mvcKnockout创建,确实存在,因为我可以执行以下操作:
viewModel.QuoteSelectedViewModel = ko.observable();
那么,为什么原型没有定义呢 我相信Prototype只适用于函数,而不是直接的JS对象,所以我猜您的视图模型没有声明为函数
要回答评论中的问题,要在发送到服务器之前删除属性,请使用
忽略映射
查看“on映射”中的一节,这将毫不奇怪地忽略您在将视图模型复制到JS对象时告诉它的属性 既然可以,为什么要复制对象并删除属性?下面是一个简单的例子:
function viewmodel() {
var self = this;
this.ignore = ko.observable("ignore");
this.copy = ko.observable("copy");
this.toJS = function () {
var mapping = {
'ignore': ["ignore", "toJS"]
}
return ko.mapping.toJS(self, mapping);
};
};
var vm = new viewmodel();
ko.applyBindings(vm);
console.log(vm.toJS());
.什么是viewmodel?它只是一个JS对象,还是一个函数?Prototype只适用于函数,我相信不是直接的JS对象。在您尝试添加到Prototype之前是否声明了构造函数?@Paul hum,实际上您是对的,viewModel的定义为:var viewModel=ko.mapping.fromJS(viewModelJs);那么,在提交到服务器之前,我如何删除属性呢?我可以看到,在调用ko.fromJS时,我可以忽略属性,但在调用ko.toJS时,似乎不可能以相反的方式进行删除。至少文件中不清楚这一点。你确定我可以在映射回JS对象时忽略属性吗?因为什么时候
.prototype
不适用于所有类型?或者你所指的Knockout有什么特别的地方吗?@user1098555你需要使用映射插件,正如我所提到的,而不是ko.toJS方法。@Ian我只讲他报告的错误消息。我假设它适用于JS中的所有内容,但从这个角度看,它并不适用。不确定我是否应该为此投反对票。@PaulManzotti我在那篇文章中没有看到任何暗示。prototype
有时没有定义。。。