Данные не загружаются после входа в метеор

У меня есть страница входа в мое приложение Meteor. Я настроил свой логин:

{{#if isLogged}}
    {{>index}}
{{else}}
    {{>login}}
{{/if}}

Если пользователь вошел в систему, я загружаю "индексный" шаблон.

Поэтому я успешно зарегистрировал пользователя, и приложение направило меня по "индексу", но коллекции не были загружены.

Например у меня есть:

Template.listWorkspace.rendered = function () {
           //some stuff
    });

Это не лаод, когда я вхожу. Я должен нажать кнопку F5 для загрузки всех моих данных.

РЕДАКТИРОВАТЬ

Вот объявление isLogged:

if(Meteor.isClient) {
Template.indexLogin.helpers({
    isLogged : function () {
        var indexIsLoggedUser = Meteor.user();
        return indexIsLoggedUser != null;
    }
});

}

Вот объявление шаблона индекса:

 <template name="index">
{{>widgetWorkspace}}
 </template>

<template name="widgetWorkspace">
{{>header}} 
    {{>workspace}}
</template>

 <template name="workspace">
<div class="row">
    <!-- <button class="btn btn-default" id="add"><span class="glyphicon glyphicon-plus"></span>Add widget</button> -->
    <button class="btn btn-success" id="editmode" data-i18n="btn.editMode"></button>
    <button class="btn btn-warning" data-toggle="modal" data-target="#myModal" data-i18n="btn.addWidgets"><span class="glyphicon glyphicon-plus"></span></button>{{>bootstrapModal}}

    <!-- <button class="btn btn-danger" id="addContainer"><span class="glyphicon glyphicon-plus"></span>Add Container</button> -->
    <!--<button class="btn btn-primary" id="serialize">Serialize</button>-->
</div>
<br>
<div id="widgetMainContainer">
    {{#each Widgets}}
        {{>widget}}
    {{/each}}
</div>
 </template>

EDIT2:

Это шаблон с рабочей областью пользователей:

 <template name="listWorkspace">
 <ul id="workspaces"></ul>
 </template>

Это визуализированный код JavaScript:

Template.listWorkspace.rendered = function () {
    var headerWorkspaceUserLogged = Meteor.users.find({_id: Session.get('user_id')}).fetch();
    var headerWorkspaces = headerWorkspaceUserLogged[0].workspace;

    if(headerWorkspaces == null || headerWorkspaces == undefined) {
        console.log('empty');
    }

    async.forEachSeries(headerWorkspaces, function(item, callback) {
        var d = $('<li/>');
        d.attr('rel', item.id-1).addClass('workspace-mini').click(function() {
            NProgress.start();
            $('#workspaces li').removeClass('workspaceSelected');
            $(this).addClass('workspaceSelected');
            var text = $('<div/>'); 
            text.addClass('workspaceText')
                    .text('workspace ' + (parseInt($(this).attr('rel'))+1))
                    .appendTo($(this))
                    .position({ my: 'center center', at: 'center center', of: $(window)})
                    .fadeIn(function() { $(this).fadeOut(function() { $(this).remove; })});
            current_workspace = headerWorkspaces[parseInt($(this).attr('rel'))];
            current_workspace_number = parseInt($(this).attr('rel'));
            Session.set('current_workspace_number', current_workspace_number+1);
            Session.set('current_workspace', current_workspace);
            //on selectionne le workspace dans la base Mongo en fonction du workspace selectionné
            Meteor.call('updateIdSelectdWorkspace', Session.get('user_id'), Session.get('current_workspace').name);
            NProgress.done();
        });
        $('#workspaces').append(d);

        //Pour l'ajout d'un nouveau workspace on memorise l'id du dernier workspace
        Session.set('i', item.id); 

        callback();
    }, function(err) {
        console.log('done');
    });
    $('#workspaces').append('<div id="addWorkspace"><span class="glyphicon glyphicon-plus"></span></div>');
    $('#addWorkspace').css('float', 'right')
        .css('margin-left', '5px')
        .css('margin-top', '2px')
        .css('cursor', 'pointer');
};

Template.listWorkspace.rendered = function () не загружается в первый раз, когда я захожу в приложение.

Кто-то может объяснить мне порядок загрузки метеором?:)

2 ответа

Здесь много чего не так. Во-первых, вам не нужен ваш собственный помощник, чтобы проверить, вошел ли пользователь в систему. Согласно документации, просто используйте Meteor. {{#if currentUser}},

Во-вторых, в вашем распоряжении система шаблонов. Почему бы вам не использовать это, чтобы определить, как виджеты должны отображаться на странице, вместо того, чтобы программно вставлять узлы DOM в ваш rendered функционировать? И почему вы используете async? Попробуйте сделать все возможное с помощью шаблонов, как можно меньше, прежде чем заходить в помощники только для того, чтобы добиться того, чего шаблоны не могут. Вам также обычно не нужно погружаться в обратные вызовы и асинхронный код в Meteor.

Попробуйте сбросить ваш проект с помощью команды сброса метеора. У меня возникла похожая проблема после переименования файла, и теперь у меня работает с {{#if currentUser}} помощник.

Другие вопросы по тегам