在 Meteor 中保存用户位置

Posted

技术标签:

【中文标题】在 Meteor 中保存用户位置【英文标题】:Save the users location in Meteor 【发布时间】:2016-11-26 09:49:39 【问题描述】:

我的问题是搜索并显示某个仪表附近的所有注册用户。在谷歌搜索了很多但没有找到好的解决方案后,我开始编写非常简单的代码(我使用 mdg:geolocation)。

main.js

// in the client side
Template.localPosition.helpers(
    'getLocalPosition': function()
        var currentUserId = Meteor.userId();
        if( currentUserId )  
            var localPos = Geolocation.latLng();
            return "LAT:" + localPos.lat + " LNG:" + localPos.lng;
        
    
);

在 main.html 中,我显示了一个带有 getLocalPosition 调用的“localPosition”模板。它可以工作,但在控制台面板中我有:

模板助手中的异常:TypeError:无法读取 null 的属性 'lat'

这是为什么?

【问题讨论】:

能否请您显示正文的其余部分 html 代码? jsfiddle.net/ciessesse/4Lrwjtam 我已将解决方案编辑回滚到您的问题,因为我们希望在这里为未来的读者保留问题。请在下面的答案框中添加您的答案,谢谢。 【参考方案1】:

错误是因为var localPosnull,你应该有一个if语句来检查localPos是否有可读值:

Template.localPosition.helpers(
    'getLocalPosition': function()
        var currentUserId = Meteor.userId();
        if( currentUserId )  
            var localPos = Geolocation.latLng();
            if(localPos) 
              return "LAT:" + localPos.lat + " LNG:" + localPos.lng;
            

        
    
);

【讨论】:

在网页中,我看到了 lat 和 lng 值,并发出警报(localPos.lat),它显示正确的值 因为刚开始渲染你的应用时,数据可能还没有准备好,服务器向客户端发送数据需要时间。因此,您的 localPos 起初可能是 null,但后来它具有正确的值。 ty @Khang 有解决等待服务器时间的方法吗? @user6720641 - 您是否按照 khang 的建议尝试了 locationPos 周围的 if 条件? 如果你使用.subscribe获取数据,你可以使用handle.ready()检查数据是否准备好,handle是你调用.subscribe时的返回值

以上是关于在 Meteor 中保存用户位置的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Meteor 和 React 获取用户注册的 rif

Meteor:将字段的自动值设置为另一个配置文件用户 sId

Meteor:将字段的自动值设置为另一个配置文件用户 sId

允许用户从公用文件夹 Meteor.js 下载文件

Meteor Session 和浏览器刷新

发布函数中的 Meteor.userId()