我有这个问题,当元素尚未在DOM中时调用rendered
函数。让我来描述我的情况。模板看起来像这样:
<template name="barfoo">
<ol>
{{#each bars}}
<li item>{{title}}</li>
{{/each}}
</ol>
</template>
以下javascript代码
Template.barfoo.bars = function () {
return Bars.find({});
};
Tempalate.barfoo.rendered = function () {
var bars = Bars.find({}).fetch();
var list = $('[items]');
};
调用rendered
函数时bars == list == []
。
所以为了解决这个问题,我实现了Iron routes这样的
Bars = new Meteor.Collection('bars');
// Routes
Router.configure({
layout: 'layout',
loadingTemplate: 'loading',
notFoundTemplate: 'notFound'
});
Router.map(function () {
this.route('/', {
controller: 'BarsController',
});
});
if (Meteor.isClient) {
App = {
subs: {
bars: Meteor.subscribe('bars'),
...
}
};
MainController = RouteController.extend({
template: 'barfoo',
before: function () { ... },
waitOn: function () {
return [App.subs.bars];
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
Meteor.publish('bars', function () {
return Bars.find({});
});
}
所有基础知识,但是当我现在去localhost:3000时,我仍然进入rendered
函数空列表。有什么建议吗?
答案 0 :(得分:1)
我假设您正在使用最新版本的iron-router
。如果是这种情况,您还需要在路由器中添加loading
挂钩,所以:
Router.onBeforeAction('loading');
另请注意,before
挂钩已标记为已弃用。