Данные не загружаются после входа в метеор
У меня есть страница входа в мое приложение 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}}
помощник.