仍然在我的流星应用程序上,我现在想如何从minimongo改进我的数据处理。
用于SQL / PHP,我想知道如何从我的minimongo集合中找到一个对象只有一次,并使用帮助程序访问每个属性,而不必每次都重新访问该集合。
到现在为止,我所做的是这样的:
Template.profile.helpers({
name: function(e, tmpl){
return Meteor.users.FindOne({_id: Meteor.userId()}.profile.name;
},
phone: function(e, tmpl){
return Meteor.users.FindOne({_id: Meteor.userId()}.profile.phone;
}
[...] });
但它越来越无聊,我想必须有一种更有效的方法来处理它,我可以只加载我的整个用户信息一次,然后显示一个帮助器获取一个参数,以显示数据,如那:{{数据名称}},{{数据电话}}
只有一个这样的助手:
Template.profile.helpers({
data: function(aString){
if (aString == "phone)
return [...].phone;
}
}
[...]
});
当然,我可以使用会话值,但我不确定它与我能做的相关。
另一件事:如何结束Meteor会话?因为使用PHP,会话在浏览器关闭时结束,并且cookie会在给定的持续时间内停留,但是对于流星会话,我永远不必重新连接,因为我的日志似乎保持不变。
有人会引导我通过这个或给我一些好习惯/提示吗?我还在阅读文档,但它非常庞大:S
谢谢!
答案 0 :(得分:0)
我建议在Atmosphere上找到收集帮助程序包。这将使您能够在模板中编写currentUser.name,并且它会自动返回用户名称辅助函数返回。
这样的工作没有问题。如果多次调用该函数并不重要。它不会伤害您的应用程序性能。
PHP和meteor会话是不同的。只要浏览器窗口保持打开或页面刷新,流星会话就会持续。你是对的,流星会话不是解决问题的方法。
答案 1 :(得分:0)
有一点需要注意 - 当你在客户端上调用Mongo.Collection.find()
时,你实际上并没有向服务器发送请求 - 这是由客户端上的miniMongo实例处理的,所以它不是真的那样效率低下。此外,在此特定情况下,当前用户始终可以Meteor.user()
使用 - 无需使用Meteor.users.find({_id: Meteor.userId()});
(有关详细信息,请参阅docs)
但是,如果您真的想要缓存该值,可以执行以下操作:
// JS
var data; // scoped so it's available to the whole file
Template.profile.onCreated({
data = Meteor.users.findOne({_id: Meteor.userId()}); // above scope makes this new definition available to the whole file
});
然后,要使用字符串参数执行您所描述的内容,您可以执行类似......
的操作Template.profile.helpers({
data: function(aString) {
if (data) { return data[aString]; }
}
});
也许更好的选择是向模板发送数据上下文 - 在HTML文件中就是这样的:
{{> profile currentUser}} <!-- currentUser returns Meteor.user() -->
您的助手可直接使用this
:
Template.profile.helpers({
data: function(aString) {
return this[aString];
}
});
如果您将数据上下文用于路由,也可以传递数据上下文{。}}。
对于Meteor会话,该模型与PHP的模型不同。在PHP中,您将会话信息存储在服务器上,每次访问服务器时,浏览器(或更一般地说,客户端)都会发送会话ID,以便查找与您的会话相关的任何内容(请参阅through IronRouter为了更好的解释)。 Meteor会跟踪连接到它的客户端,因此只要您的浏览器处于打开状态,会话就会保持打开状态。如果您需要操作Meteor用户会话,请查看this question。