【问题标题】:Adding a class to a DOM element inside a template created by an atmosphere package?将类添加到由大气包创建的模板内的 DOM 元素?
【发布时间】:2015-09-17 22:14:06
【问题描述】:

我目前正在使用 Meteor、materializecss 氛围包和 user-accounts:materialize 氛围包。我正在尝试使用物化基于类的样式来更改用户帐户的样式:物化登录页面,该页面由 {{>atForm}} 模板创建。

Template.atForm.onRendered( function(){
  var element = $(".at-form, .at-btn");
  element.addClass("grey lighten-2 grey-text text-darken-4");
});

这在页面最初呈现时效果很好。但是,如果我先登录,然后再注销,则会再次显示登录模板,但这次不会调用 onRendered() 函数并且我的样式丢失了。我该如何避免呢?

还有比调用 onRendered() 更好的方法来影响 3rd 方模板中的元素吗?

【问题讨论】:

    标签: javascript meteor meteor-accounts


    【解决方案1】:

    我会推荐使用https://github.com/aldeed/meteor-template-extension 来覆盖你自己的包模板。我认为更简单的方法。

    @Kyll - 我认为 README 足以作为示例;以下是你可以如何使用它:

    将包添加到meteor项目中:

    meteor add aldeed:template-extension
    

    添加您的新模板

    <template name="myTemplate">...</template>
    

    在客户端的启动代码中,覆盖模板:

    Template.myTemplate.replaces("originalTemplateName");
    

    【讨论】:

    • 这个答案除了链接之外几乎没有任何信息。您能否对其进行编辑以反映您的解决方案?例如,您可以包含代码演示。
    • 如果我理解 .replaces() 的意图,它会完全覆盖原始模板。考虑到我的目标是仅更改由该模板生成的一个元素的类,这对于我在这个特定实例中尝试完成的工作来说太具有侵入性了。这绝对是一个选项,但如果我必须完全替换该模板,我不妨分叉 useraccounts:materialize 包并直接对模板进行更改。不过谢谢!
    【解决方案2】:

    问题在于 at-form 的子模板会发生变化。您需要为它们中的每一个处理 onRendered 以确保您的类适用于所有这些。

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 2018-01-21
      • 2012-09-16
      • 2013-10-28
      • 2011-02-19
      • 2019-06-12
      • 2012-05-31
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多