流星:wainOn(铁路)无法正常工作

时间:2014-03-31 19:15:42

标签: meteor javascript

我有这个问题,当元素尚未在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函数空列表。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我假设您正在使用最新版本的iron-router。如果是这种情况,您还需要在路由器中添加loading挂钩,所以:

Router.onBeforeAction('loading');

另请注意,before挂钩已标记为已弃用。