【问题标题】:Where to put a particular template helper在哪里放置特定的模板助手
【发布时间】:2015-10-23 20:00:12
【问题描述】:

我有一个 pageTitle 模板变量,它位于我网站每个部分的标题元素 () 中,我希望它是动态的,而不是硬编码的,因此网站维护更容易。

使用 Meteor(我目前正在阅读 Discover Meteor),最好将其放在 Session 变量中,然后从 Template 助手返回值(即如 Discover Meteor 的 Session 章节中的示例) ,或者是否有可以更好地处理这个问题的 Atmosphere 包?

另外,如果我确实将它放在模板帮助程序中,我会有点不清楚放置帮助程序的适当文件的位置。也就是说,如果我(几乎)每个模板都有一个 .js 文件(因为我一直在关注这本书),我真的需要在每个模板的 . .js 文件?

有这么多冗余似乎效率低下,但如果我有那个 Template.templateName.helper() 代码的单个实例,我不知道该放在哪里。

非常感谢任何帮助。谢谢!

【问题讨论】:

标签: javascript meteor meteor-blaze


【解决方案1】:

我会把它放在一个全局助手中。您可以为此使用Template.registerHelper。我通常将这些助手放在client/helpers/global.js 中。我不确定您为什么要为此使用会话变量。但这里有一个简单的例子来说明这个助手的样子:

client/helpers/global.js

Template.registerHelper('setPageTitle', function (newTitle) {
  document.title = newTitle
})

用法:

{{ setPageTitle 'Hi' }}

【讨论】:

  • 我不一定需要一个会话变量来达到这个目的。正如我在问题中所说,我只是在通过 Discover Meteor 书 (discovermeteor.com) 工作,这是作者在本书的会话章节中展示 Meteor 会话功能的方式。
  • 是的,这不是一个实际的例子——我同意。
【解决方案2】:

我对 Meteor 也很陌生,但看起来您可以使用文档中的 Observe 集合 - http://docs.meteor.com/#/full/observe 并在其中包含一个包含您的 pageTitles 的集合。

所以应该是这样的

document.title = yourCursor.observe(function({ changed: function(id, field){return field.pageTitle} })

至于位置,客户端的任何地方都应该可以工作。

不确定这是否是最好的方法,但希望它有所帮助!

【讨论】:

  • 谢谢,这听起来是一个合理的解决方案。我对 Meteor 还太陌生,因此无法对这个框架中的“完成方式”持意见,但显然它与典型的服务器端 MVC 框架有完全不同的约定。
  • 很抱歉在这里介入,但这不是一个好的解决方案。创建集合涉及很多的开销。对于需要响应的值,这将是合理解决方案的一半。但是页面标题绝对不需要是被动的。反应性真的很好,但它总是有代价的。所以尽量避免在不需要的地方。
  • 没错,页面标题不会改变(大部分情况下),除非用户在网站上导航。它应该保存在文件中吗?我用不同的框架以不同的方式解决这个问题。这通常只是使用模板渲染的“yield”模式的框架的问题,而不是将它们拼凑在一起,因为使用这种模式,通常除了内容之外的所有内容都保存在一个不会在页面之间更改的布局模板中。有些框架要求您为应用程序的不同部分使用不同的布局模板,但这并不实用,恕我直言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多