【发布时间】:2012-05-22 03:32:42
【问题描述】:
jQuery 和 Meteor
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) 在每个项目上-> 有效,但似乎非常浪费。
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 中...尽管如此,请保持良好状态 ;)
【问题讨论】:
标签: jquery coffeescript publish-subscribe meteor