流星反应源
Meteor reactive sources
我有一个应用程序,其中有 5 个集合:一个用于书籍,一个用于类型(书籍,如幻想、科幻......),一个用于语言,一个用于订阅(包括 type_id、lang_id 和 user_id) 最后一个如果 Meteor.users.
我创建了这个辅助函数来检索适合每个用户订阅的书籍(我正在使用 angular-meteor)
$scope.helpers({
userBooks:function(){
var subBooks=[];
var books;
var user_id=Meteor.userId();
Subscribtions.find({user_id:user_id}).forEach(function(sub){
books=Books.find({type_id:sub.type_id,lang_id:sub.lang_id}).fetch();
for(var i=0;i<books.length;i++){
subBooks.push(books[i]);
}
});
return subBooks;
}
})
假设增加了一本新书或新订阅,或者另一个用户登录,子书数据会更新吗?它是否被认为是反应性的(因为它包含反应性数据)?
我建议您简化这一点,并使用 reywood:publish-composite 包从服务器发布一个已经加入的 Subscriptions
和 Books
集合。
服务器:
Meteor.publishComposite('mySubs', {
find: function() { // Find all the subscriptions for the current user
return Subscriptions.find({ userId: this.userId });
},
children: [
{
find: function(sub) { // find books related to the current subscription 'sub'
return Books.find({ type_id: sub.type_id, lang_id: sub.lang_id});
}
}
]
});
客户端:
Meteor.subscribe('mySubs');
然后你可以简单地Books.find()
找到当前用户感兴趣的所有书籍
这还可以减少从服务器发送到客户端的订阅和图书数量,从而使您的应用运行速度更快。
注意:随着时间的推移,您可能会发现将集合命名为 Subscriptions 会造成混淆,因为该术语是 Meteor 的核心概念。
我有一个应用程序,其中有 5 个集合:一个用于书籍,一个用于类型(书籍,如幻想、科幻......),一个用于语言,一个用于订阅(包括 type_id、lang_id 和 user_id) 最后一个如果 Meteor.users.
我创建了这个辅助函数来检索适合每个用户订阅的书籍(我正在使用 angular-meteor)
$scope.helpers({
userBooks:function(){
var subBooks=[];
var books;
var user_id=Meteor.userId();
Subscribtions.find({user_id:user_id}).forEach(function(sub){
books=Books.find({type_id:sub.type_id,lang_id:sub.lang_id}).fetch();
for(var i=0;i<books.length;i++){
subBooks.push(books[i]);
}
});
return subBooks;
}
})
假设增加了一本新书或新订阅,或者另一个用户登录,子书数据会更新吗?它是否被认为是反应性的(因为它包含反应性数据)?
我建议您简化这一点,并使用 reywood:publish-composite 包从服务器发布一个已经加入的 Subscriptions
和 Books
集合。
服务器:
Meteor.publishComposite('mySubs', {
find: function() { // Find all the subscriptions for the current user
return Subscriptions.find({ userId: this.userId });
},
children: [
{
find: function(sub) { // find books related to the current subscription 'sub'
return Books.find({ type_id: sub.type_id, lang_id: sub.lang_id});
}
}
]
});
客户端:
Meteor.subscribe('mySubs');
然后你可以简单地Books.find()
这还可以减少从服务器发送到客户端的订阅和图书数量,从而使您的应用运行速度更快。
注意:随着时间的推移,您可能会发现将集合命名为 Subscriptions 会造成混淆,因为该术语是 Meteor 的核心概念。