2016-12-08 7 views
0

私は私のクラスの1つにトラッカーを持っています。このクラスは、いくつかの計算を行い、オブジェクトの配列を返す別のクラスから変数をインポートします。私はこのデータをテーブルに移そうとしています。それは通常、私はdbのデータを引っ張っているときに、トラッカーがその依存関係を置くので、しかし私は配列を使用しているときに見つけることができますそれは変数に依存し、空の配列の半分。流行変動のための流星トラッカー

この例でわかるように、badDebtsNameSpaceは別のクラスからインポートされた配列変数です。しかし、常にundefinedを返します。

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) 



}); 

コンソールのログから印刷されたデータを見ると、すべてのことはうまくいくようです。なぜこれが起こっているのかに関するアイデア。

おかげ

更新

要求としてより多くのコード。次に、変数をエクスポートする出力クラスの一部を示します。

私がコメントで述べたようにあなたが反応性の配列でこれを行うことができますが、あなたは tracker dependencyこの Trackerができるように、基本的に他のいくつかの計算に依存するレジスタを使用することができますパッケージを追加したくない場合は
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); 
      } 
     } 
    }); 
+1

はトラッカーとのことの一つは、彼らがトリガされるために*無効*データソースを必要とすることです。 'badDebtsNameSpace.globalDebCalc'は反応的なデータソースですか?それが定義されているかどうかには影響しませんが、輸入/輸出にはおそらく他の問題があります。 –

+0

エクスポートはデータベースデータから行われます。彼らはまた、トラッカーでdepeningしています –

+0

どのように私はあなたのコードの詳細を参照する必要があると思うどのように反応性バースを使用したと思うだろう –

答えて

0

それに反応する。また、以下のfor(var i in array)コードを持つ配列を超えるおshouldn't反復:

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

マイケルに感謝します。私はこのコードを大いに学びました。ありがとう –