以下java脚本定义了MyViewModel对象,其属性为“ text ”,函数为“ save ”。
<script type="text/javascript">
function MyViewModel() {
this.text = ko.observable('');
}
MyViewModel.prototype.save = function () {
alert(this.text()); // Works fine
var data = ko.ToJSON(this); // Error: Object doesn't support this property or method ?
$.ajax({
type: 'POST',
url: '/Person/Save',
data: data,
contentType: 'application/json',
success: function (data) {
alert(data);
}
});
};
</script>
<script type="text/javascript">
$(function () {
var viewModel = new MyViewModel()
ko.applyBindings(viewModel);
});
</script>
并定义了以下按钮:
<button data-bind="click: save">SAVE</button>
单击按钮时的结果:
可能有些微不足道的遗漏或错误,但我看不到它。有什么提示吗?
答案 0 :(得分:4)
Knockout没有ToJSON
方法 - 它确实有toJSON
方法:
function MyViewModel() {
this.text = ko.observable('');
}
MyViewModel.prototype.save = function () {
alert(this.text()); // Works fine
var data = ko.toJSON(this); // Works fine too
$.ajax({
type: 'POST',
url: '/Person/Save',
data: data,
dataType: 'json',
success: function (data) {
alert(data);
}
});
};
答案 1 :(得分:0)
您已将视图模型定义为函数(如果您愿意,可以使用类):
function MyViewModel() {
this.text = ko.observable('');
}
相反,您应该将其定义为var(对象):
var MyViewModel = {
text: ko.observable('');
}
然后您应该发现以下情况正常:
var data = ko.ToJSON(MyViewModel);