Meteor 如何控制在单个模板中显示两个订阅?

Meteor 如何控制在单个模板中显示两个订阅?,meteor,publish-subscribe,spacebars,Meteor,Publish Subscribe,Spacebars,抱歉,流星框架有点新 我订阅了两个发布功能。即使两个发布函数都针对同一个集合,但它们都有不同的函数,我希望在一个模板中显示这些函数。我如何做到这一点。我做了大量的研究,但似乎没有足够的信息说明如何实现这一目标 以下是我订阅的代码中的两个发布函数: .server/main.js: Meteor.publish('MerchantTrending', function (categoryMan){ var currentUser = this.userId; return buyList.fin

抱歉,流星框架有点新

我订阅了两个发布功能。即使两个发布函数都针对同一个集合,但它们都有不同的函数,我希望在一个模板中显示这些函数。我如何做到这一点。我做了大量的研究,但似乎没有足够的信息说明如何实现这一目标

以下是我订阅的代码中的两个发布函数:

.server/main.js:

Meteor.publish('MerchantTrending', function (categoryMan){
var currentUser = this.userId;

return buyList.find({ who:"Merchant", ownerId:currentUser, itemCategory: { $in: categoryMan } }, {skip: 0, limit: 3});

});
Meteor.publish('myTopViews', function (){

var currentUser = this.userId;
return buyList.find({ newArrivalsExpiryDate : {'$lte': new Date()}}, {ownerId:currentUser }, {skip: 0, limit: 3});
});
.server/main.js:

Meteor.publish('MerchantTrending', function (categoryMan){
var currentUser = this.userId;

return buyList.find({ who:"Merchant", ownerId:currentUser, itemCategory: { $in: categoryMan } }, {skip: 0, limit: 3});

});
Meteor.publish('myTopViews', function (){

var currentUser = this.userId;
return buyList.find({ newArrivalsExpiryDate : {'$lte': new Date()}}, {ownerId:currentUser }, {skip: 0, limit: 3});
});
下面是代码中的订阅函数

.client/main.js:

Router.route('/MerchantLandingPage', {    
subscriptions: function(){
      var categoryMan = Session.get('category');

    return  Meteor.subscribe('MerchantTrending', categoryMan, 'merchantTopViews')

}
});
现在,代码中的helper函数:

Template.MerchantLandingPage.helpers({

  'top3Trending' : function () {    
    return buyList.find({}).fetch();
    },

 'myTopViews' : function () {

    return buyList.find({}).fetch();
    }
});    
现在是代码中的模板:

<template name="MerchantLandingPage">

##### *** Top three trending items *** ########

{{#each top3Trending}}

ItemName::  <b>{{itemName}}</b> <br>
Item Category:: <b>{{itemCategory}}</b> <br>                 
Discription:: <b>{{descriptions}}</b> <br>  
Image:: {{this.photo._id}} <br> 
Date Created:: {{createdDate}} <br>  

{{/each}}

<br><br>

 ############ *** My top Views *** #############

{{#each myTopViews}}

ItemName::  <b>{{itemName}}</b> <br>
Item Category:: <b>{{itemCategory}}</b> <br>                 
Discription:: <b>{{descriptions}}</b> <br>  
Image:: {{this.photo._id}} <br> 
Date Created:: {{createdDate}} <br>   

{{/each}}

</template>

#####***前三大趋势项目***########
{{{#每个前三名趋势}
ItemName::{{ItemName}}
项目类别::{{itemCategory}}
描述::{{descriptions}}
图片:{这张照片。_id}}
创建日期:{createdDate}}
{{/每个}}

############***我的最高观点***############# {{{#每个MyTopView} ItemName::{{ItemName}}
项目类别::{{itemCategory}}
描述::{{descriptions}}
图片:{这张照片。_id}}
创建日期:{createdDate}}
{{/每个}}
{{{每个myTopViews}}和{{{每个top3Trending}都已成功显示,但显示不正确。当变量
categoryMan
处于

Meteor.subscribe('MerchantTrending',categoryMan',MerchanttopView')

更改值时,它会同时影响
{{{{each myTopViews}}
{{{each top3Trending}}
,而其仅应影响
{{{{each top3Trending}

我如何才能使订阅不影响模板中的
{{{{each myTopViews}}
{{{{each top3Trending}}
,而只影响
{{{each myTopViews}

谢谢你的帮助

欢迎来到流星

一旦您了解到以下情况,解决方案就是直截了当的:

  • 订阅只是从服务器到客户端MiniMongoDB的DB文档流。因此,您的两个订阅(在同一个集合中有多个Sub是完全可以的)只需填写您客户的
    buyList
    本地集合即可

  • 客户端集合的使用通常独立于您订阅数据的方式。因此,您只需在
    top3Trending
    myTopViews
    帮助程序中使用类似的选择器和可能的选项,就像您在发布服务器端所做的那样(这两个帮助程序之间显然不同)

  • 顺便说一句,您甚至不需要
    fetch()
    通过
    find()
    返回集合游标,Blaze知道如何直接处理它。

    欢迎来到Meteor

    一旦您了解到以下情况,解决方案就是直截了当的:

  • 订阅只是从服务器到客户端MiniMongoDB的DB文档流。因此,您的两个订阅(在同一个集合中有多个Sub是完全可以的)只需填写您客户的
    buyList
    本地集合即可

  • 客户端集合的使用通常独立于您订阅数据的方式。因此,您只需在
    top3Trending
    myTopViews
    帮助程序中使用类似的选择器和可能的选项,就像您在发布服务器端所做的那样(这两个帮助程序之间显然不同)


  • 顺便说一句,您甚至不需要
    fetch()
    通过
    find()
    返回集合游标,Blaze知道如何直接处理它。

    我发现您的代码有一些问题,首先-您的第二次订阅无法工作,因为您的查询错误:

    Meteor.publish('myTopViews', function (){
    
        var currentUser = this.userId;
        return buyList.find(
            { ownerId:currentUser, newArrivalsExpiryDate : {'$lte': new Date()}},
            {skip: 0, limit: 3}
        );
    });
    
    您将
    ownerId:currentUser
    用大括号括起来,它在上面是固定的

    发布/订阅的工作方式是,如果有两个发布发送不同的数据,模板不“知道”数据来自两个不同的订阅。它只能访问所有订阅发送的所有数据

    因此,您的两个助手
    top3trending
    myTopViews
    返回的内容完全相同。你可以删除其中一个


    您应该将订阅移出路由器并移入模板本身

    我发现您的代码有一些问题,首先-您的第二个订阅无法工作,因为您的查询错误:

    Meteor.publish('myTopViews', function (){
    
        var currentUser = this.userId;
        return buyList.find(
            { ownerId:currentUser, newArrivalsExpiryDate : {'$lte': new Date()}},
            {skip: 0, limit: 3}
        );
    });
    
    您将
    ownerId:currentUser
    用大括号括起来,它在上面是固定的

    发布/订阅的工作方式是,如果有两个发布发送不同的数据,模板不“知道”数据来自两个不同的订阅。它只能访问所有订阅发送的所有数据

    因此,您的两个助手
    top3trending
    myTopViews
    返回的内容完全相同。你可以删除其中一个


    您应该将订阅移出路由器并移入模板本身

    有一个包允许从发布中筛选数据。

    有一个包允许从发布中筛选数据。

    如何使用必需的字段从服务器发布集合并在客户端应用选择器?如何使用必需的字段和应用从服务器发布集合客户端中的选择器?感谢您澄清了我的模板中发生了什么,特别是模板如何没有注意到信息是如何来自两个不同订阅的,从而合并了信息。将订阅从路由器移动到模板本身并没有什么区别,因为Meteor.subscribe('MerchantTrending',categoryMan',merchantTopViews')接受一个变量,该变量会更改为两个订阅返回的数据。@perusopersonal