knockoutjs ko.toJs (ko.toJSON) 不起作用




我使用的是knockoutjs 2.2.0版本,出现以下情况:
Javasript代码
这是我的javascript代码,有三个模型:"Tab1"、"Tab2"one_answers"viewModel">

var CustomExport = {
Tab1: function () {
this.tab1Array = ko.observableArray([
{name: "Tab1 Item1"},
{name: "Tab1 Item2"},
{name: "Tab1 Item3"}
]);
},
Tab2: function () {
this.tab2Array = ko.observableArray([
{name: "Tab2 Item1"},
{name: "Tab2 Item2"},
{name: "Tab2 Item3"}
]);
},
viewModel: function () {
this.myTab1 = new CustomExport.Tab1();
this.myTab2 = new CustomExport.Tab2();
this.grabData = function(){
alert(ko.toJS(CustomExport.viewModel));
};
}    
}
ko.applyBindings(new CustomExport.viewModel());


因此,通常我有两个模型,并且我想将这些模型中的所有数据作为json对象抓取到一个"viewModel"模型中,grabData函数应该提醒我模型数据。

这是我的HTML代码

<div data-bind="with: myTab1">
<ul data-bind="template: {name: 'tabTmpl', foreach: tab1Array}"></ul>
</div>
<br/>
<div>------------------------------------------</div>
<br/>
<div data-bind="with: myTab2">
<ul data-bind="template: {name: 'tabTmpl', foreach: tab2Array}"></ul>
</div>
<br/>
<input type="button" data-bind="click: grabData" value="Grab all data from Models" />

<script id="tabTmpl" type="text/html">
<li>
<div data-bind="text: name"></div>
</li>
</script>


问题如下:
单击"Grab all data from the models"按钮,我应该得到一个警报,该警报必须包含来自两个模型("Tab1"、"Tab2")的数据,作为json对象,但目前我得到了以下警报消息:

function () {
this.myTab1 = new CustomExport.Tab1();
this.myTab2 = new CustomExport.Tab2();
this.grabData = function(){
alert(ko.toJS(CustomExport.viewModel));
};
}


此外,我已经在jsFiddle中创建了它单击此处查看示例


知道我做错了什么吗?

您应该使用this而不是CustomExport.viewModel:

this.grabData = function(){
console.log(ko.toJS(this));
};

但最好为this:创建闭包

function () {
var self = this;
self.myTab1 = new CustomExport.Tab1();
self.myTab2 = new CustomExport.Tab2();
self.grabData = function(){
alert(ko.toJS(self));
};
}

最新更新