我使用的是knockoutjs 2.2.0版,并且有以下情况:
Javasript Code
这是我的3个模型的javascript代码:' Tab1',' Tab2'和' 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());
所以,一般来说我有2个模型,我想从这些模型中获取所有数据到一个" viewModel"作为json对象的模型, 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>
问题如下:
点击&{39; Grab all data from the models
&#39;按钮我应该收到警报,其中必须包含来自2个模型(&#39; Tab1&#39;,&#39; Tab2&#39;)的数据作为 json对象,但目前我得到以下内容提醒信息:
function () {
this.myTab1 = new CustomExport.Tab1();
this.myTab2 = new CustomExport.Tab2();
this.grabData = function(){
alert(ko.toJS(CustomExport.viewModel));
};
}
另外,我在jsFiddle Click here to see an example
中创建了它
知道我做错了什么吗?
答案 0 :(得分:3)
您应该使用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));
};
}