MeteorJS Tracker:订阅后如何 return 一个值?
MeteorJS Tracker: How to return a value after subscription?
使用 Tracker.autorun()
方法遇到了这个问题:
Template.registerHelper('getUserName', (userId) => {
let userName = '';
Tracker.autorun((tracker) => {
if (userId) {
let subscription = Meteor.subscribe('userName', userId);
if (subscription.ready()) {
tracker.stop();
let user = Meteor.users.findOne({_id: userId}, {fields: {emails: 0}});
userName = user.services.facebook.name;
}
}
});
return userName;
});
我想 return 来自出版物的用户名,但是,范围很棘手,因为助手 return 是一个空字符串,而 Tracker 仍在订阅数据。
我试过这个:
Template.registerHelper('getUserName', (userId) => {
let subscription;
Tracker.autorun((tracker) => {
if (userId) {
subscription = Meteor.subscribe('userName', userId);
}
});
if (subscription.ready()) {
let user = Meteor.users.findOne({_id: userId}, {fields: {emails: 0}});
return user.services.facebook.name;
}
});
但是订阅还没有方法.ready()
。
关于如何在此处使用范围的任何想法?我记得闭包很有用。
我想你想将你的订阅从你的助手中移出。这最好留给在 onCreated() 函数中调用助手的模板。查看此 link 以获得帮助:http://guide.meteor.com/data-loading.html
所以你的助手看起来像:
Template.registerHelper('getUserName', (userId) => {
let user = Meteor.users.findOne({_id: userId}, {fields: {emails: 0}});
if( user && user.services && user.services.facebook) {
return user.services.facebook.name;
}
});
然后在你的模板中你会做:
{{#if getUserName currentUser}}
<!-- Your code here. -->
{{else}}
<!-- What to do if you don't have a user defined yet. -->
{{/if}}
使用 Tracker.autorun()
方法遇到了这个问题:
Template.registerHelper('getUserName', (userId) => {
let userName = '';
Tracker.autorun((tracker) => {
if (userId) {
let subscription = Meteor.subscribe('userName', userId);
if (subscription.ready()) {
tracker.stop();
let user = Meteor.users.findOne({_id: userId}, {fields: {emails: 0}});
userName = user.services.facebook.name;
}
}
});
return userName;
});
我想 return 来自出版物的用户名,但是,范围很棘手,因为助手 return 是一个空字符串,而 Tracker 仍在订阅数据。
我试过这个:
Template.registerHelper('getUserName', (userId) => {
let subscription;
Tracker.autorun((tracker) => {
if (userId) {
subscription = Meteor.subscribe('userName', userId);
}
});
if (subscription.ready()) {
let user = Meteor.users.findOne({_id: userId}, {fields: {emails: 0}});
return user.services.facebook.name;
}
});
但是订阅还没有方法.ready()
。
关于如何在此处使用范围的任何想法?我记得闭包很有用。
我想你想将你的订阅从你的助手中移出。这最好留给在 onCreated() 函数中调用助手的模板。查看此 link 以获得帮助:http://guide.meteor.com/data-loading.html
所以你的助手看起来像:
Template.registerHelper('getUserName', (userId) => {
let user = Meteor.users.findOne({_id: userId}, {fields: {emails: 0}});
if( user && user.services && user.services.facebook) {
return user.services.facebook.name;
}
});
然后在你的模板中你会做:
{{#if getUserName currentUser}}
<!-- Your code here. -->
{{else}}
<!-- What to do if you don't have a user defined yet. -->
{{/if}}