我有这段代码
$(document).ready(function()
{
"use strict";
function ObjectB(data)
{
/* I WANT TO ACCESS foo HERE */
}
function ObjectA(data)
{
var mappedObjectBs = [];
this.ObjectBs = ko.observableArray([]);
mappedObjectBs = $.map(data.ObjectBs, function(item) {
return new ObjectB(item);
});
this.ObjectBs(mappedObjectBs);
}
function SampleViewModel()
{
var self = this;
self.ObjectAs = ko.observableArray([]);
$.getJSON('data/foo.json', function(foo) {
/* foo IS AVAILABLE HERE */
$.getJSON('data/bar.json', function(bar) {
var mappedObjectAs = [];
mappedObjectAs = $.map(bar, function(item) {
return new mappedObjectAs(item);
});
self.ObjectAs(mappedObjectAs);
});
});
}
ko.applyBindings(new SampleViewModel());
});
我想在这里做的是访问foo
内的ObjectB
。
有办法做到这一点吗?
我使用此类解决方案的原因是因为我不希望ObjectB
个对象执行冗余的JSON调用。
答案 0 :(得分:1)
为什么不将父对象引用传递给子对象?像这样:
function ObjectB(data, root) {
this.root = root;
alert(this.root.someProperty);
}
function ObjectA(item, root) {
var mappedObjectBs = [];
mappedObjectBs.push(new ObjectB(item, root));
this.ObjectBs(mappedObjectBs);
}
function SampleViewModel() {
this.someProperty = true;
//Inside your ajax call
new ObjectA(item, this);
}