对不起Meteor框架的新手!
我订阅了两个发布功能。即使两个发布函数都以同一个集合为目标,它们都具有不同的功能,我希望在一个模板中显示。我如何实现这一目标。我做了大量的研究,但似乎没有足够的信息来说明如何实现。
以下是我订阅的代码中的两个发布函数:
.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});
});
.server / main.js:
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')
}
});
现在代码中的辅助函数:
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>
{{#each myTopViews}}和{{#each top3Trending}}都成功显示但未正确显示。当变量categoryMan
在
Meteor.subscribe(&#39; MerchantTrending&#39;,categoryMan,&#39; merchantTopViews&#39;)
更改值,它会同时影响{{#each myTopViews}}
和{{#each top3Trending}}
的结果,只会影响{{#each top3Trending}}
。
如何才能让订阅对{{#each myTopViews}}
和{{#each top3Trending}}
产生影响,但我的模板中只有{{#each myTopViews}}
?
感谢您的帮助!
答案 0 :(得分:0)
欢迎来到流星!
一旦你理解了解决方案,就可以直接解决:
订阅只是从服务器到客户端的MiniMongoDB的数据库文档流。所以你的2个订阅(在同一个Collection上有几个潜艇完全没问题)只需填写你客户的buyList
本地收藏。
使用集合客户端通常与订阅数据的方式无关。因此,您应该像在发布服务器端那样使用类似的选择器以及top3Trending
和myTopViews
帮助程序中可能的选项(显然,在2个帮助程序之间不一样)。
作为旁注,您甚至不需要fetch()
由find()
返回的Collection光标,Blaze知道如何直接处理它。
答案 1 :(得分:0)
我发现您的代码存在一些问题,首先 - 您的第二个订阅无效,因为您的查询错误:
CREATE TABLE tblTempTestTableStack
(DataColumn1 DATETIME, DataColumn2 DATETIME)
INSERT INTO tblTempTestTableStack
SELECT SUBSTRING('2017-02-01 12:44:15.160 || 2017-02-01 23:44:15.160', 1, 23)
, SUBSTRING('2017-02-01 12:44:15.160 || 2017-02-01 23:44:15.160', 30, 23)
UNION ALL
SELECT SUBSTRING('2017-02-01 13:44:15.160 || 2017-02-03 02:44:15.160', 1, 23)
, SUBSTRING('2017-02-01 13:44:15.160 || 2017-02-03 02:44:15.160', 30, 23)
SELECT CAST(CONVERT(DATE, DataColumn1) AS VARCHAR(10)) + ' ' +
RIGHT('00' + CAST(DATEPART(HH, DataColumn1) AS VARCHAR(2)), 2) + ':00:00' + ' || '
+ CAST(CONVERT(DATE, DataColumn2) AS VARCHAR(10)) + ' ' +
RIGHT('00' + CAST(DATEPART(HH, DataColumn2) AS VARCHAR(2)), 2) + ':00:00'
FROM tblTempTestTableStack
你有Meteor.publish('myTopViews', function (){
var currentUser = this.userId;
return buyList.find(
{ ownerId:currentUser, newArrivalsExpiryDate : {'$lte': new Date()}},
{skip: 0, limit: 3}
);
});
用花括号包裹,它固定在上面。
发布/订阅的工作方式是,如果您有两个发布不同数据的发布,则模板不会“知道”数据来自两个不同的订阅。它只能访问所有订阅发送的所有数据。
出于这个原因,你的两位助手ownerId: currentUser
和top3trending
正在返回完全相同的东西。你可以删除其中一个!
您应该将订阅移出路由器并移至模板本身。 Here's an article that will help you with that!
答案 2 :(得分:0)
有一个包percolate:find-from-publication允许过滤出版物中的数据。