2015-04-14 4 views
0

Я создаю приложение в Метеор. Я пытаюсь передать объект пользователя в шаблон, но консоль поддерживает печать из «пользователя не определены», хотя я четко определить объект пользователя в моем контроллере:Объект undefined в Meteor/JavaScript

controller.js:

checkoutController = RouteController.extend({ 
waitOn: function() { 
    var sessionId = Session.get('sessionId'); 
    Meteor.subscribe('cartItems', sessionId); 
    Meteor.subscribe('userProfileExtended2'); 
}, 
data: function(){ 
    return { 
     user: Meteor.users.findOne(this.params._id) //user defined 
    }; 
}, 
action: function() { 
    this.render('Checkout'); 
    console.log('user:') 
    console.log('user: ' + user); 
} 
}); 

Моих публикующего .js, который публикует объект пользователя:

//this is for a user to edit his/her own profile since there's no admin check 

Meteor.publish('userProfileExtended2', function(userId) { 
if(!this.userId) return null; 
var currUser = Meteor.users.find(this.userId); 

//need to add logic to make sure user can only edit his/her account 
console.log('user searched for from userprofileextended2 is ' + this.userId); 
return Meteor.users.find(this.userId); 
}); 

Вот мой маршрут:

Router.route('/checkout', {name: 'Checkout', controller: 'checkoutController'}); 

Примечания:

1) Мои консольный терминал распечатывает пользователя Id правильно 2) Мой браузер консоль печатает «ReferenceError: пользователь не определен»

Любые мысли? Заранее спасибо!

+0

изменить данные из контекста объекта в эту функцию: data (function = function) (user = Meteor.users.findOne (this.params._id)} ' – Ethaan

+0

Спасибо - я все еще сталкиваюсь с этой проблемой:/ –

+0

hi - console.log ('user:' + user); уже после этого.render ('Checkout'); –

ответ

1

У вас есть пара проблем в коде, которые могут вызвать путаницу, а именно вы возвращаете неправильного пользователя в функцию подписки. Во-вторых, вам нужно указать, какой пользователь вы хотите увидеть:

Meteor.publish('userProfileExtended2', function() { 
    return Meteor.users.find({_id: this.userId}); 
}); 

Кроме того, необходимо напечатать правильную переменную при визуализации страницы:

console.log('user: ' + Meteor.user()) 

Вам не нужно использовать поиск для пользователя. Вы можете использовать Meteor.user() в коде или {{currentUser}} в ваших шаблонах.

Также при отправке документа пользователя с использованием Meteor.users.find будьте осторожны, чтобы использовать прогнозы, чтобы были предоставлены только те поля, которые вы собираетесь разделить, а не весь документ. Это может повысить безопасность просматриваемого документа пользователя.

+0

привет - спасибо за ваш ответ. однако, я попробовал это, и я все еще получаю ту же ошибку. Есть ли какая-либо другая информация, которую я могу вам помочь? –

+0

@ user1547174 Благодарим вас за разъяснение/изменение. Я обновил ответ, вы можете использовать 'Meteor.user()' больше ничего не нужно. – Akshat

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

  • Нет связанных вопросов^_^