Meteor 如何控制在单个模板中显示两个订阅?
抱歉,流星框架有点新 我订阅了两个发布功能。即使两个发布函数都针对同一个集合,但它们都有不同的函数,我希望在一个模板中显示这些函数。我如何做到这一点。我做了大量的研究,但似乎没有足够的信息说明如何实现这一目标 以下是我订阅的代码中的两个发布函数: .server/main.js:Meteor 如何控制在单个模板中显示两个订阅?,meteor,publish-subscribe,spacebars,Meteor,Publish Subscribe,Spacebars,抱歉,流星框架有点新 我订阅了两个发布功能。即使两个发布函数都针对同一个集合,但它们都有不同的函数,我希望在一个模板中显示这些函数。我如何做到这一点。我做了大量的研究,但似乎没有足够的信息说明如何实现这一目标 以下是我订阅的代码中的两个发布函数: .server/main.js: Meteor.publish('MerchantTrending', function (categoryMan){ var currentUser = this.userId; return buyList.fin
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}
谢谢你的帮助 欢迎来到流星
一旦您了解到以下情况,解决方案就是直截了当的:
buyList
本地集合即可top3Trending
和myTopViews
帮助程序中使用类似的选择器和可能的选项,就像您在发布服务器端所做的那样(这两个帮助程序之间显然不同)fetch()
通过find()
返回集合游标,Blaze知道如何直接处理它。欢迎来到Meteor
一旦您了解到以下情况,解决方案就是直截了当的:
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