【问题标题】:When using templates within templates in Meteor, where should events be called?在 Meteor 的模板中使用模板时,应该在哪里调用事件?
【发布时间】:2015-09-24 00:13:14
【问题描述】:

我的 Books 收藏有各种不同的视图,这会产生一个通用模板“books”,但在“books”中也有许多较小的模板。例如,“bookCovers”、“bookList”、“bookSearch”。

我似乎让大多数事件都可以正常工作,但我觉得我的代码在应该调用某个函数的事件方面陷入了混乱。

我开始尝试在最外层模板中存储尽可能多的内容(因此我只需要调用一次),但如果不在“内部”模板上调用它们,某些事件似乎不会运行。

我也有点不确定是否有让我的文件保持整洁的最佳做法 - 每个内部模板一个文件,或者尝试在外部模板上保留尽可能多的调用?

如果这个问题不是很精确,我深表歉意,但我觉得这是一个在其他地方没有很好涵盖的领域。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我同意@blackcat 的观点,并且通常在最低级别的模板上定义事件。这使我可以更改它而不必担心对它上面的模板的影响。更重要的是,在{{#each}}{{#with}} 块中,您可以在this 中获得正确的数据上下文。

    虽然 Meteor 有 全局帮助器,但它没有 gloval 事件。这确实使代码模块化变得更加困难。

    几种方法包括:

    1. 定义各个事件处理程序调用以保持代码 DRY 的全局函数。
    2. 使用动态模板,其中事件在父模板上定义,但内部模板是动态选择的。

    【讨论】:

    • 感谢@michel-floyd 的另一个好答案。我将尝试将我的一些事件推迟到全局函数,因为在某些情况下我会调用它们两次(书籍列表视图/书籍封面视图)
    【解决方案2】:

    根据我的卑微经验,最好采用“组件”方法。我尽量让我的模板尽可能小和简单(当它们变得太大时将它们分开)。我在可能的最低级别定义我的事件,这意味着从生成 DOM 的实际模板中触发事件,而不是从父模板。

    我这样做有两个原因:

    • 您拥有可重用的组件
    • 代码更容易阅读

    我发现recommendations for angular architecture 非常相关,并且经常尝试坚持使用它。

    简而言之:每个模板一个文件,每个模板一个带有相关逻辑的js文件,每个模板一个scss文件。

    我仍然非常想听听其他人对这个问题的看法。

    【讨论】:

    • 感谢黑猫的精彩回答。有点不确定是否标记为已接受,因为您也对其他视图感兴趣!
    • 我倾向于将相关的 html 模板分组到一个文件中,否则我最终会得到所有这 5 行文件。当模板 A 嵌套模板 B 嵌套模板 C 时,更容易看到它们并在彼此旁边编辑它们。我认为这只是个人喜好。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2015-08-12
    相关资源
    最近更新 更多