【问题标题】:How can I trigger Template#onRendered when Blaze reuses a template?Blaze 重用模板时如何触发 Template#onRendered?
【发布时间】:2017-03-16 00:42:50
【问题描述】:

当 Blaze 重用模板时,如何触发 Template#onRendered 或等效项?

我有一个基于 <select> 元素的 jQuery UI 选择菜单小部件,其 <option> 子元素是使用 {{#each}} 创建的(目标是一个利用 Session 的帮助器以获取反应性)和一个 Blaze 模板。我正在刷新选择菜单 onRendered。

  • Blaze 模板正确。 (<option>{{text}}</option>)
  • 会话正在更改(通过console.log() 进行检查并在浏览器控制台中手动设置。
  • 会话反应性、助手和{{#each}} 正在工作(检查隐藏的<select> 显示其选项已正确更新)

只是模板被重用了,所以尽管只要Session 选项上下文更改为有更多选项(在创建新模板实例后调用onRendered())一切正常,jQuery UI 选择菜单是如果Session 选项上下文更改为具有相同或更少的选项(更少的选项只调用onDestroyed() 并且相同数量的选项甚至不这样做),则不准确(与上下文的当前状态不同步)。

【问题讨论】:

    标签: jquery-ui meteor meteor-blaze


    【解决方案1】:

    解决方案:Tracker.afterFlush(callback) 在帮助器中使用( 每次我预期的时候都会被调用)而不是 Tempate.on_[anything]_()。

    https://docs.meteor.com/api/tracker.html#Tracker-afterFlush

    例如

    myContextOptionsHelper: function () {
      let context = Session.get('myContext');
      let contextOptions = app.client.tempdata.contextOptions[context];
      Tracker.afterFlush(() => {
        if ($('#mySelectmenu').is(':ui-selectmenu')) {
          $('#mySelectmenu').selectmenu('refresh');
        }
      });
      return contextOptions;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-15
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2017-03-13
      • 2017-10-07
      • 1970-01-01
      相关资源
      最近更新 更多