流星:如何避免检查到处是否存在变量或属性
Meteor: how can I avoid checking for the existence of a variable or property everywhere?
在 Meteor 中编程时,我经常发现自己在编写模板助手时不得不撒上类型检查或存在检查(至少在几个非常常见的条件下)。
- 一个模板的
- 帮助程序依赖于由另一个模板加载的集合
- 每当模板帮助程序对另一个模板负责呈现存在的 DOM 片段进行操作时
例如(在第一种情况下):
Template.example.rendered
rev1 = getRev(revId1)
revText1 = html2plain(rev1.text)
其中 getRev 正在对修订集合执行操作,该操作可能会也可能不会在首次呈现示例模板时加载。因此,rev1.text 有时会抛出异常,因为如果在加载修订版之前调用,getRev 最终会返回 null 或未定义。
然后,为了安全起见,我最终不得不检查整个代码中的大量变量/对象是否存在,然后再使用它们的任何属性。
- 我可以想象使用路由器直到不同的集合准备就绪后才呈现我的示例模板(但对于嵌套模板和会话变量更改,这不会那么热)。
- 我可以将帮助程序代码包装在 if (isCollectionReady) 中,这可能会有所帮助,但似乎不是最佳实践。
问题是:是否有一种规范或最佳实践方法来识别这些情况,为它们编码,或者完全避免这种情况?
Meteor 的设计使其模板是反应式的,因此在大多数情况下,您不需要对它们进行 DOM 操作。当基础数据更改时,模板会自动重新呈现,以便它们始终显示最新数据。看看 Meteor 文档中的示例:它们不使用任何 DOM 操作代码。模板将数据放入正确的位置,这就是他们所需要的。
根据我的经验,有两个常见原因需要将代码放入rendered
:
- 您正在加载一个小部件,该小部件需要在模板呈现并准备就绪后进行初始化,就像
<select>
替换一样。 - 你正在做动画。(在这种情况下,我通常会告诉我的模板将所有内容放在适当的位置,但使用隐藏元素的 CSS 类,然后
rendered
所做的只是对显示的内容进行动画处理。
在加载订阅之前呈现通常是可以的;在最坏的情况下,模板将呈现空白,然后在数据流入时重新呈现。另请记住,可以从模板帮助程序以外的客户端代码subscribe
,例如客户端Meteor.startup
。最后不要忘记created
助手;如果您真的想等到模板加载后再订阅,那将是比订阅更好的地方 rendered
,因为它被调用得更快。
你在做什么 DOM 操作,为什么?假设您没有使用小部件或动画,则很有可能可以通过自行使用模板来实现所需的内容,而无需任何其他操作代码。
相关文章:
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否存在React Native“;WEB代码安全防护”;
- 验证会话中是否存在对象's数组
- 如何查找值是否存在于二叉树中
- 检查是否存在使用chrome扩展的javascript库
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 测试mongo脚本中是否存在参数
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 检查数组中是否存在字符串值,并返回找到的数组值js
- 如何通过json对象选项卡中的Id来检查对象是否存在
- 检查是否存在任意控制器/操作
- 如何检查一个字符串的所有字符是否都存在于另一个字符串中
- Javascript滑块不滑动,如何判断是否存在JS冲突
- 根据手机上是否存在文件,在jQuery mobile中动态填充列表视图
- javascript测试是否存在两个标志中的任何一个
- 如何使用javascript检查移动sd卡中是否存在文件
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 需要帮助使用JQuery.inArray()检查值是否存在
- 在运行Javascript/jQuery中的函数之前,检查元素是否存在是否更具性能