【问题标题】:Injecting a global helper into all underscore templates with Marionette使用 Marionette 将全局助手注入所有下划线模板
【发布时间】:2014-05-29 07:51:10
【问题描述】:

这最初是an other question 的第二部分,我能够将其分离到它自己的问题中,以便更好地进行搜索索引。参考它以获得更具体的上下文可能会有所帮助。

我的问题是:如何优雅地将全局视图助手注入所有下划线模板

这个问题的灵感直接来自i18next documentation。在项目中切换到车把模板为时已晚,但到目前为止,我更喜欢使用registerHelper 样式处理它的方式。 在那边搜索,我遇到了Derick Bailey's View Helpers article,它像往常一样为一个不雅的问题提供了一个非常巧妙的解决方案。

在我们的架构中,我们决定为所有视图重新实现 serializeData,而不依赖于默认实现(从视图绑定的模型中导出所有属性)。我对此的看法是,如果我想获得任何接近 registerHelper 风格的东西,我必须扩展 Marionette.View 基类并提供一个基本的帮助器,通过继承注入所有视图。
这似乎与车把助手的清洁度相去甚远,让它完全可以工作,在这一点上似乎没有什么,但可以肯定。

非常感谢提供任何示例或任何提示来解决此问题。

谢谢。

[编辑]

我找到了解决这个确切问题的方法,详细信息在 my previous question 中。 西蒙还发布了一个也可能很好用的答案。

【问题讨论】:

  • 我不熟悉 Marionette,但 Lodash(Underscore 的替代品,两者最终可能合并)支持这一点。例如,_.templateSettings.imports = { foo: function () { ... } }; 定义了一个可以在任何模板中使用的新函数 foo()

标签: marionette view-helpers underscore.js-templating


【解决方案1】:

你为什么不直接使用把手和木偶?您可以使用任何您喜欢的模板库。查看 this 或基于 Marionette docs 编写您自己的集成。我自己已经这样做了,以将 DustJS 与 Marionette 集成。

编辑

可以很好地工作的方法是在下划线对象上创建一个templateHelpers 属性。然后你可以这样做:

<span><%= _.templateHelpers.someHelper(data) %></span>

【讨论】:

  • 就像我说的在项目中有点太晚了,我们已经有半百多个模板和视图依赖下划线。但我实际上找到了一个巧妙的解决方案,可以覆盖 Marionette.Renderer 来注入翻译功能。我现在正在测试实现,如果它适合所有用途,我可能会将其发布为响应!谢谢
  • 啊,抱歉,我错过了你帖子的那一部分。
  • @Mikechaos 我为你添加了一个额外的建议。
  • 哦,我根本没想到。这不是我想要的解决方案(请参阅我的编辑),但我会赞成,因为它是一个可能工作得很好而且干净的解决方案!
  • 我已经在应用程序的一部分中使用您的答案,我们既没有使用骨干也没有使用木偶。注入视图助手比扩展下划线要麻烦得多!因此,我将标记为已接受。对于使用 Marionette 的适当响应,我仍然建议使用 this 方法。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多