变量的流星跟踪器



我在我的一个类中有一个跟踪器,此类从另一个类中导入一个计算并返回对象数组的变量。然后,我试图用这些数据填充表。通常在我提取数据库的数据时会找到它,因为跟踪器对此构成了依赖,但是当我使用数组时,它似乎并没有对变量依赖,并且仅运行一次跟踪器,而这又不会返回一个半空数组。

您在此示例中可以看到,我的baddebtsnamespace是从另一个类导入的数组变量。但是它总是返回未定义的。

Tracker.autorun(function() { // Tracker function for reactivity
        if(typeof badDebtsNameSpace.globalDebCalc != "undefined"){
            cashInData[0] = badDebtsNameSpace.globalDebCalc['fromOpeningDeb'];
            cashInTable.loadData(cashInData);
            cashInTable.render();
        }
        console.log(badDebtsNameSpace)

});

如果我从控制台日志中查看打印的数据,一切似乎都很好。关于为什么会发生这种情况的任何想法。

谢谢

update

根据要求的更多代码。这是导出变量的一些输出类。

export var prodNameSpace = {};
export var overheadsNameSpace = {};
export var fixedAssetsName = {};
export var fundingNameSpace = {};

export var globalDebCalc;
export var badDebtsNameSpace;
export var productSummary;
export var assetSummary;
export var vatSummary;
export var overheadsSummary;
export var fundingSummary;
//Overheads Tracker TO Calc Data
    Tracker.autorun(function() { // Tracker function for reactivity
        var tempData = Session.get('data');
        var overs = Overhead.find({fileId: tempData._id}).fetch();
        var globalData = GlobalWhatIfData.find({fileId: tempData._id}).fetch();
         if(overs.length > 0 && globalData.length > 0){
            for(var i in overs){
                var percentageOf = PercentageOfData.find({parentId: overs[i]._id}).fetch();
                var vatRef = VatDataRef.find({parentId: overs[i]._id}).fetch();
                if(percentageOf.length > 0 && vatRef.length > 0){
                    var n = overs[i].description;
                    overheadsNameSpace[n] = new OverheadCalc(productSummary, percentageOf, vatRef, globalData);
                }
            }   
            overheadsSummary = new OverheadsCalc(overheadsNameSpace);
         }
    });
    //Bad Debt Tracker 
    Tracker.autorun(function() { // Tracker function for reactivity
        var tempData = Session.get('data');
        var bds = BadDebts.find({fileId: tempData._id}).fetch();
        var globaDeb = GlobalDebtors.find({fileId: tempData._id}).fetch();
        if(bds.length > 0 && globaDeb.length > 0){
            for(var i in bds){
                badDebtsNameSpace = new BadDebtsCalc(bds, productSummary, globaDeb);
            }
        }
    });

您可以像我在评论中提到的反应式数组一起执行此操作,但是如果您不想添加软件包,则可以使用跟踪器依赖性,这基本上是对其他某些其他依赖性计算以使Tracker可以对其做出反应。另外,您不应该在下面使用for(var i in array)代码迭代阵列:

export var prodNameSpace = {};
export var overheadsNameSpace = {};
export var fixedAssetsName = {};
export var fundingNameSpace = {};
export var globalDebCalc;
export var badDebtsNameSpace = [];
export var bdnsDep = new Tracker.Dependency; // register a dependency
export var productSummary;
export var assetSummary;
export var vatSummary;
export var overheadsSummary;
export var fundingSummary;
//Overheads Tracker TO Calc Data
Tracker.autorun(function() { // Tracker function for reactivity
  var id = Session.get('data')._id; // small simplification
  var overs = Overhead.find({fileId: id}).fetch();
  var globalData = GlobalWhatIfData.find({fileId: id}).fetch();
  if(globalData.length){ // you don't need to check >0 as 0 will be *falsy*
    overs.forEach(o=>{
      var percentageOf = PercentageOfData.find({parentId: o._id}).fetch();
      var vatRef = VatDataRef.find({parentId: o._id}).fetch();
      if(percentageOf.length && vatRef.length){
        var n = o.description;
        overheadsNameSpace[n] = new OverheadCalc(productSummary, percentageOf, vatRef, globalData);
      }    
    }   
    overheadsSummary = new OverheadsCalc(overheadsNameSpace);
  }
});
//Bad Debt Tracker 
Tracker.autorun(function() { // Tracker function for reactivity
  var id = Session.get('data')._id;
  var bds = BadDebts.find({fileId: id}).fetch();
  var globaDeb = GlobalDebtors.find({fileId: id}).fetch();
  if(bds.length && globaDeb.length){
    bdnsDep.changed(); // tell the tracker to register the change
    for(var i = 0; i < bds.length; i++){
      badDebtsNameSpace[i] = new BadDebtsCalc(bds, productSummary, globaDeb);
    }
  }
});
Tracker.autorun(function() { // Tracker function for reactivity
  bdnsDep.depend(); // this is where we react to the change
  if( badDebtsNameSpace.globalDebCalc ){ // you don't have to check the type, just check to see if the key exists
    cashInData[0] = badDebtsNameSpace.globalDebCalc['fromOpeningDeb'];
    cashInTable.loadData(cashInData);
    cashInTable.render();
  }   
});

最新更新