【问题标题】:Template.instance() and context messed with with Blaze block helpersTemplate.instance() 和上下文与 Blaze 块助手混淆
【发布时间】:2015-03-23 21:17:21
【问题描述】:

我正在使用一个简单的模板块助手来显示加载动画,隐藏其中的任何内容。这对于提交表单和防止按钮被按下两次非常有帮助。

<template name="waiting">
  {{#if isLoading}}
      {{> loader}}
  {{else}}
    {{> UI.contentBlock}}
  {{/if}}
</template>

我决定把它放在一个块助手中,因为我以前从未尝试过它,而且我想让我的代码保持干燥——我在几个地方使用了这种模式。

我在使用此块助手访问Template.instance() 时遇到问题,不是块助手,而是它所在的模板。我也遇到了模板上下文的问题。以下是我的问题的详细信息:

我正在设置一个确认删除按钮,如下所示:

  {{#waiting isLoading=loadingDelete}}
    {{#if confirmDelete}}
      <button class="confirm">Are you sure?</button>
    {{else}}
      <button class="delete">Delete</button>
    {{/if}}
  {{/waiting}}

我还将loadingDeleteconfirmDelete 反应变量放在模板实例中,这样我就不会污染Session

Template.editRecord.created = ->
  @loadingDelete = new ReactiveVar(false)
  @confirmDelete = new ReactiveVar(false)

Template.editRecord.helpers
  loadingDelete: () -> Template.instance().loadingDelete.get()
  confirmDelete: () -> Template.instance().confirmDelete.get()

然后我创建一些这样的事件:

'点击 .delete': (e,t) -> t.confirm.set(true)

'点击 .confirm': (e,t) -> t.loadingDelete.set(true) _id = @_id Meteor.call 'deleteRecord', _id, (err) -> t.loadingDelete.set(false) 如果出错 控制台日志错误 别的 Router.go“回家”

这个实现的问题是Template.instance() 在这里引用了confirmDelete 助手中的等待模板:

confirmDelete: () -> Template.instance().confirmDelete.get()

第二个问题是事件中的数据上下文是指等待模板的上下文,因此我需要使用_id = Template.parentData()_id而不是_id = @_id。但是我无法从这里访问 editRecord 模板实例或其任何变量,这令人沮丧。

我将模板更改为修复第一个问题的模板。

  {{#if confirmDelete}}
    <button class="confirm">Are you sure?</button>
  {{else}}
    {{#waiting isLoading=loadingDelete}}
      <button class="delete">Delete</button>
    {{/waiting}}
  {{/if}}

但这很丑,不是我想要的。我希望只是用这个块助手替换我的#if 块,但我最终写了更多的代码,同时试图用我的模板干燥。这似乎不正确。

我注意到#if 块不会导致这些上下文和模板实例问题。有什么我遗漏的吗?

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案1】:

    事实证明,Meteor 团队已经发现了这个错误并正在努力修复它。看到这个PR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2021-07-30
      相关资源
      最近更新 更多