更新的问题: 一个简单的客户端HTTP.get()调用无法在iOS模拟器上运行。同样的调用是在浏览器中的模板中获取数据并完美显示(localhost:3000) 之前我认为这与本地集合有关,但问题实际上是HTTP.get调用,它不会返回cordova(ios仿真器或设备)中的任何数据。
请注意,我的整个代码仅在客户端上(如果(Meteor.isClient){}而在if(Meteor.isCordova){}中没有任何内容。
原始问题:是否可以在Cordova中定义本地集合(Meteor 0.9.3)? 我的应用程序中有一个本地(仅限客户端)集合,如下所示: Items = new Meteor.Collection(null);
此本地集合暂时从外部API获取数据(通过添加'meteor add http'并使用HTTP.get()),此内容将推送到模板。这完全出现在localhost:3000上的浏览器模板中,通过帮助程序(返回Items.find()),但是当我运行'meteor run ios'时,数据没有在iOS模拟器中加载。
首先,是否有可能期望本地收藏品在Cordova内工作? 这应该在里面定义: Meteor.isCordova({})? 是否需要添加特定于cordova的包装? 我认为在这种情况下需要本地集合,因为数据是根据用户的设备位置检索的,仅与当前会话相关。
任何想法都会受到赞赏。
(流星球在这里,对不起,如果这听起来很愚蠢!)
编辑:服务器和客户端上定义的集合在浏览器和iOS模拟器上都有效。所以问题只出在本地收藏中。
答案 0 :(得分:2)
@imslavko
你说的确对!它是我在进行API调用的服务器上的CORS问题。
经过几天的打破,我最终发现服务器没有Access-Control-Allow-Origin:*用于简单的GET / POST请求。
感谢您帮助我解决这个问题。
事实证明,Cordova与此毫无关系。所有HTTP.get()调用都在Cordova中完美地工作,包括本地集合。
答案 1 :(得分:0)
还有一个需要注意的技巧。
HTTP.get('/route')
可能最终会出现在手机本地服务器而不是数据来自的远程服务器上 - 因此您不会收到您期望的数据。
改为使用
HTTP.get(__meteor_runtime_config__.ROOT_URL + '/route')
因为ROOT_URL变量指向Cordova应用程序和普通浏览器中的正确服务器。