gpt4 book ai didi

meteor - 在 Flow Router 中等待订阅

转载 作者:行者123 更新时间:2023-12-02 11:50:21 26 4
gpt4 key购买 nike

目标:我想根据订阅调用检索到的文档,从我的流路由器功能中渲染模板 A 或模板 B 之一。

更具体地说,我想根据用户文档的 isAdmin 字段呈现管理员或学生模板,该字段在完成订阅调用后检索。我的路由器功能如下图。

FlowRouter.route('/songs/list', {
name: 'Songs.list',
subscriptions: function(params, queryParams) {
this.register('getUser', Meteor.subscribe('allUsers', Meteor.userId()));
}
action(params, queryParams) {
if(Meteor.user().isAdmin){
BlazeLayout.render("admin_home");
}
else{
BlazeLayout.render("student_home");
}
}
});

Flow 路由器文档特别提到

FlowRouter only deals with registration of subscriptions. It does not wait until subscription becomes ready.

因此可能存在这样的情况:在订阅更新本地缓存之前评估“if 条件”。

对于iron-router,这可以使用waitOn轻松处理。然而,对于流路由器,我被迫拥有 2 个单独的函数,这进一步强制执行 2 个单独的 url,用于呈现管理员和学生模板。

这是流路由器开发人员做出的设计选择吗?

最佳答案

为什么不将订阅逻辑带出路由并使用 template level subscriptions使用内置 Template.subscriptionsReady 帮助程序?

FlowRouter.route('/songs/list', {
name: 'Songs.list',
action: function(params) {
BlazeLayout.render('home');
}
});
<template name="home">
{{#if Template.subscriptionsReady}}
{{#if isAdmin}}
{{> admin_home}}
{{else}}
{{> student_home}}
{{/if}}
{{/if}}
</template>
Template.home.onCreated(function() {
this.subscribe('allUsers', Meteor.userId());
});

Template.home.helpers({
isAdmin: function() {
// check if user is admin
}
});

这种方法也recommended in FlowRouter docs .

关于meteor - 在 Flow Router 中等待订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com