【问题标题】:How to ensure template helper has data?如何确保模板助手有数据?
【发布时间】:2017-09-08 18:56:20
【问题描述】:

我有一个选择框,它在每个选项上运行一个小方法来确定“选择”是什么:

      <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";
    }
},

在客户端...当我直接更新数据库时,它最终会在下拉列表中正确加载并响应更新。我的问题是我在加载时多次收到以下错误:

模板助手中的异常:TypeError:无法读取未定义的属性“currentSoftMargin”

虽然它有效,但这个错误似乎并不正确,这是代码中唯一使用currentSoftMargin 的地方。几乎就像模板助手determineDefaultSelect 运行速度比数据库调用可能发生的速度更快,并且产品异步调用......也许?我可以防止这种情况吗?

【问题讨论】:

    标签: asynchronous meteor meteor-blaze


    【解决方案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
    },
    

    【讨论】:

      【解决方案2】:

      在您的模板中使用{{#if Template.subscriptionsReady}}{{/if}} 以确保准备好所有需要的数据。

      【讨论】:

      • 这正是我所需要的!谢谢
      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2014-11-27
      • 2013-02-18
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多