KnockoutJS - 从嵌套对象获取ViewModel数据

时间:2013-09-16 03:35:41

标签: javascript knockout.js scope

我有这段代码

$(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调用。

1 个答案:

答案 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);
}