仍然在我的流星应用程序,我想现在如何改善我的数据处理从最小。
习惯于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;
}( });
但是它越来越无聊了,我想一定有一种更有效的方法来处理它,在这种情况下,我可以只加载整个用户的信息一次,然后用一个带有一个参数的助手来显示这样的数据:{ data name}},{data phone}
只有一个这样的帮手:
Template.profile.helpers({
data: function(aString){
if (aString == "phone)
return [...].phone;
}
}
[...]
});当然,我可以使用会话值,但我不确定它是否与我所能做的相关。
另一件事:如何结束流星会议?因为使用PHP,会话在浏览器关闭时结束,cookie在给定的时间内停留,但是对于流星会话,我从来不需要每天重新连接,因为我的日志似乎仍然存在。
有人会指导我解决这个问题,还是给我一些好的习惯/建议?我还在读医生,但它很大:
谢谢你!
发布于 2015-04-15 13:54:19
这里要注意的是--当您在客户端上调用Mongo.Collection.find()时,实际上并不是向服务器发送请求--这是由客户机上的miniMongo实例处理的,所以它并不是那么低效。而且,在这个特定的实例中,当前用户总是可以作为Meteor.user()使用--不需要使用Meteor.users.find({_id: Meteor.userId()}); (更多信息请参见文档 )。
但是,如果您真的想缓存该值,您可以这样做:
// 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];
}
});如果将数据上下文用于路由,也可以传递数据上下文通过IronRouter。
对于Meteor会话,模型与PHP的模型不同。在PHP中,您将会话信息存储在服务器上,每次访问服务器时,浏览器(或者更一般的客户端)都会发送会话ID,以便它能够查找与会话相关的任何内容(请参阅这个问题以获得更好的解释)。Meteor跟踪连接到它的客户端,因此只要您的浏览器打开,会话就会保持打开状态。如果您需要操作Meteor用户会话,请查看这个问题。
发布于 2015-04-15 13:51:24
我建议在大气中找到收集助手的包。这将使您能够在模板中编写currentUser.name,并且它将自动返回用户名称助手函数返回。
像这样工作没有问题。函数是否被多次调用并不重要。它不会损害您的应用程序的性能。
PHP和流星会话是不同的。流星会话可持续很长时间,只要浏览器窗口仍然打开或页面被刷新。你是对的,流星会议不是解决你的问题的方法。
https://stackoverflow.com/questions/29650970
复制相似问题