jQuery 和流星
Meteor 是响应式的,诞生于一个只有一个初始页面加载的 Web 应用世界,jQuery 诞生于一个服务器生成页面的世界。
所以,问题是……什么时候在 Meteor 模板上调用 jQuery 插件?
1) 在页面加载时 -> 不起作用。数据还没有。
Template.contextualFeed.feedItems = ->
Feed.find()
$("abbr.timeago").timeago() # Calling the feed right away is useless as Feed.find() is initially empty and will populate a bit later when subscription is delivering the initial data.
<template name="contextualFeed">
<ul class="feed {{isActive "feed"}}">
{{#each feedItems}}
<li class="popup-holder">
{{> contextualFeedItem}}
</li>
{{/each}}
</ul>
</template>
2) 在每个 Item-> Works 上,但似乎非常浪费。
Template.contextualFeed.feedItems = ->
Feed.find()
Template.contextualFeed.jQueryMe = ->
$("abbr.timeago").timeago() # Works, but seems incredibly wasteful
<template name="contextualFeed">
<ul class="feed {{isActive "feed"}}">
{{#each feedItems}}
<li class="popup-holder">
{{> contextualFeedItem}}
{{jQueryMe}}
</li>
{{/each}}
</ul>
</template>
3)在所有项目加载后 -> 工作,但仍然没有应有的优雅......
Template.contextualFeed.feedItems = ->
Feed.find()
Template.contextualFeed.jQueryMe = ->
Meteor.defer ->
#(cut) some ugly code to make sure it only executes once.
$("abbr.timeago").timeago() # Works, but seems incredibly wasteful
<template name="contextualFeed">
<ul class="feed {{isActive "feed"}}">
{{#each feedItems}}
<li class="popup-holder">
{{> contextualFeedItem}}
{{jQueryMe}}
</li>
{{/each}}
</ul>
</template>
4)当数据不是作为添加单独加载到每个项目上时,是否有一些事件会触发?
那么,你有在 Meteor 模板中调用 jQuery 的更简洁的方法吗?
PS:代码示例在 Coffeescript 中……尽管如此,请保持良好状态;)