0

我有这个代码

$(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());
});

我在这里要做的是访问fooinside ObjectB

有没有办法做到这一点?

我采用这种类型的解决方案的原因是因为我不希望ObjectB对象执行冗余 JSON 调用。

4

1 回答 1

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);
}
于 2013-09-16T08:40:49.897 回答