Javascript 如何从另一个可观察对象访问对象

Javascript 如何从另一个可观察对象访问对象,javascript,knockout.js,Javascript,Knockout.js,我不确定这是否有意义。不知道该怎么说 基本上我有这个 function Line(id, name, equipType, model, height, length, loadsWeek, weight, width, pallets) { this.id = ko.observable(id); this.name = ko.observable(name); this.height = ko.observable(height);

我不确定这是否有意义。不知道该怎么说

基本上我有这个

    function Line(id, name, equipType, model, height, length, loadsWeek, weight, width, pallets) {

    this.id = ko.observable(id);
    this.name = ko.observable(name);        
    this.height = ko.observable(height);
    this.length = ko.observable(length);
    this.weight = ko.observable(weight);
    this.width = ko.observable(width);
    this.model =  ko.observable(model);
    this.equipType = ko.observable(equipType);
    this.loadsWeek = ko.observable(loadsWeek);

this.perimeter = ko.dependentObservable(function() {
        return parseInt(this.height()) + parseInt(this.length())
    }, this);

    var mapped = ko.utils.arrayMap(pallets, function(pallet) {              
        return new Pallet(pallet.id, pallet.name, pallet.height, pallet.width, this)    
    });

    this.pallets = ko.observableArray(mapped);
}

function Pallet(id, name, height, width, line) {

    this.id = ko.observable(id);
    this.name = ko.observable(name);
    this.height = ko.observable(height);
    this.width = ko.observable(width);
    this.line = ko.dependentObservable(line);
            //calculate something here that uses a variable from Line

}
现在在托盘中,我需要访问line对象以从中获取值。我要做的计算需要线对象的值。此代码现在不起作用,因为我显然无法将该行传递到托盘对象

下面是代码的其余部分

    var viewModel = {       
    lines: ko.observableArray([]),      
    activeTab: ko.observable()  
};

$.getJSON("/json/all/lines", { customer_id : customer_id } , function(data) {       

        //ko.mapping.fromJS(data, null, viewModel.lines);           

        var mappedData = ko.utils.arrayMap(data, function(line) {   

            return new Line(line.id, line.name, line.equipType, line.model, line.height, line.length, line.loadsWeek, line.weight, line.width, line.pallets)        
        });

});

问题可能是,在传递给arrayMap的匿名函数中,这与您所想的不同

尝试以下方法:

var that = this;
var mapped = ko.utils.arrayMap(pallets, function(pallet) {
     return new Pallet(pallet.id, pallet.name, pallet.height, pallet.width, that) 
}); 
---然后

function Pallet(id, name, height, width, line) {        
    this.id = ko.observable(id);      
    this.name = ko.observable(name);      
    this.height = ko.observable(height);          
    this.width = ko.observable(width);     
    this.line = ko.dependentObservable(line);              
    //calculate something here that uses a variable from Line    

    this.something = ko.observable(function() {
         return this.line().somethingFromParent();
    });
  }  

谢谢管理不当。我以为我已经脱离了那个阶段。哈哈。