2015-12-07 3 views
0

В метеора, когда мои страницы загружает данные моя общая установка:данных не загружается должным образом в Метеоре

var data 

Router.route('/userinfo/edit', { 
    loadingTemplate: 'Loading', 
    subscriptions: function(){ 
    console.log('And now we wait') 
    return Meteor.subscribe('_userinfodb', Meteor.userId()) 
    }, 
    action: function(){ 
    console.log('RonPaulItsHappening.gif') 
    data = UserInfoDB.find({userId: Meteor.userId()}).fetch()[0] 
    if(typeof data == "undefined"){ 
     var errorReport = 'User ' + Meteor.userId() + ' failed to retrive data from UserInfoDB, on page ' + Router.current().path + ' on ' + new Date() + '.' 
     Meteor.call('generateErrorReport', errorReport) 
     this.redirect('/error/data') 
    } 
    console.log(data) 
    this.render('userinfoedit') 
    } 
}) 

Это иногда работает, но довольно finnicky, и, как правило, приводит к данным является неопределенным. Однако, как только вы приземлитесь на/error/data, если вы нажмете назад, данные будут загружаться просто отлично. Есть ли что-то, что я делаю неправильно?

+0

Вы просите нас принять контекст, где это всегда «нечто иное, чем неопределенное?» Data = UserInfoDB.find ({userId: Meteor.userId()}). Fetch() [0] '? –

+0

Да, запись в UserInfoDB автоматически генерируется при регистрации новой учетной записи. –

ответ

0
  1. waitOn подписки для обеспечения данных готова, прежде чем action вызывается и что loadingTemplate не отображается до тех пор.
  2. Для обеспечения безопасности никогда, никогда, никогда не проходите Meteor.userId() до подписки или метода от клиента. Просто используйте this.userId (функция публикации) или Meteor.userId() (метод) на стороне сервера.
+0

Теперь действие не вызывается. Новый код: http://pastebin.com/8KBDnc0w Кроме того, я плохо кодировал Meteor.userId() части, я планировал их исправлять до того, как веб-сайт вышел в прямой эфир. –

+0

Вам больше не понадобится 'if (this.ready())' в вашем 'action:'. –

+0

Даже после его удаления действие еще не вызывается. Мне нужно сделать this.next() или что-то еще? –

Смежные вопросы