2017-09-07 37 views
0

我有一個運行在每個選項一個小方法來確定什麼「選擇」是一個選擇框:如何確保模板助手有數據?

 <label for="soft-due-date-controller">Soft Due Days:</label> 
     <select class="form-control" id="soft-due-date-controller"> 
     <option value="0" {{determineDefaultSelect '0'}}>0</option> 
     <option value="1" {{determineDefaultSelect '1'}}>1</option> 
     <option value="2" {{determineDefaultSelect '2'}}>2</option> 
     <option value="3" {{determineDefaultSelect '3'}}>3</option> 
     <option value="4" {{determineDefaultSelect '4'}}>4</option> 
     <option value="5" {{determineDefaultSelect '5'}}>5</option> 
     <option value="6" {{determineDefaultSelect '6'}}>6</option> 
     <option value="7" {{determineDefaultSelect '7'}}>7</option> 
     <option value="8" {{determineDefaultSelect '8'}}>8</option> 
     <option value="9" {{determineDefaultSelect '9'}}>9</option> 
     <option value="10" {{determineDefaultSelect '10'}}>10</option> 
     </select> 

這裏是方法:

determineDefaultSelect: function(optionText){ 
    let savedSoftSchedueDays = SoftDueDates.find().fetch()[0].currentSoftMargin; 
    if(optionText == savedSoftSchedueDays){ 
     return "selected"; 
    } 
}, 

在客戶端...它當我直接更新數據庫時,最終會正確加載和響應地更新下拉菜單中的更新。我的問題是,我得到負荷多次出現以下錯誤上載:

Exception in template helper: TypeError: Cannot read property 'currentSoftMargin' of undefined

雖然它的工作原理,這個錯誤似乎不正確的,這是在使用currentSoftMargin代碼的唯一地方。幾乎像模板助手determineDefaultSelect運行速度比db調用可能發生和產品異步調用...也許?我能阻止這個嗎?

回答

1

當幫助程序在您的數據訂閱是ready()之前運行時,您會看到此錯誤。您可以等待訂閱準備呈現模板(在此期間呈現微調代替)或抵禦運行時錯誤:

determineDefaultSelect: function(optionText){ 
    const doc = SoftDueDates.findOne(); // equivalent to .find().fetch()[0]; 
    const savedSoftScheduleDays = doc && doc.currentSoftMargin; // will not error 
    return (optionText == savedSoftScheduleDays) ? "selected" : ""; // shorthand 
}, 
1

使用{{#if Template.subscriptionsReady}}{{/if}}在你的模板,以確保所需的所有數據都準備好了。

+0

這正是我需要的!謝謝 – Rolljee