流星:科尔多瓦和网站的不同(铁)路线
我想用不同于网站或WebApp的智能手机应用程序构建服务。 我的想法是在铁路由器不同的路由表,就像这样:流星:科尔多瓦和网站的不同(铁)路线
/客户端
- routes.js
/科尔多瓦
- routes.js
...
此外,文件可以包含在“if(Meteor.isCordova){”和“if(Meteor.isClient){”括号中。
到目前为止,我尝试这样做:
Router.map(function() {
if (Meteor.isCordova) {
this.route('homeCordova', {
path: '/'
});
}
if (Meteor.isClient) {
this.route('homeWeb', {
path: '/'
});
}
}
和它的作品的路径,而不是布局,所以
if (Meteor.isCordova) {
Router.configure({
layoutTemplate: 'mainLayoutCordova',
loadingTemplate: 'loadingCordova',
...
if (Meteor.isClient) {
Router.configure({
layoutTemplate: 'mainLayout',
loadingTemplate: 'loading',
...
不走。
作为替代方案,我可以在服务器上同时运行两个不同的Meteor-Apps?这有任何意义吗?
任何想法如何解决或如何解决这个问题?
示例应用程序本地市场只有智能手机应用程序,所以只有1个router.js文件,如果您已经登录,也可以反向使用,WebApp看起来几乎与手机上的相同。
问候
这似乎的愚蠢的,但也许你应该做两级流星的应用程序,一个使用浏览器和服务器和移动版本与服务器连接的独立。您将不得不在开发部分共享全局文件夹和服务器文件夹,但它可能是最直接的工作方式。在我身边,我做的网络和应用程序完全相同,所以我不明白你的问题......
一个简单的解决方案是为每个版本添加一个不同的basePath,如“/ mobile/main”和“/桌面/主”。在移动设备上,您只需确保从移动路由开始,并且还需要处理404错误,以免将移动客户端重定向至桌面路由。
我全新的流星,但我发现,这种方法似乎工作:
我有web
和mobile
两个不同的父模板。而一个main
模板可以根据变量动态地为其中一个或另一个服务。
<body>
{{> main}}
</body>
<template name="main">
{{> Template.dynamic template=environment}}
</template>
<template name="web">
<h2>On the Web</h2>
</template>
<template name="mobile">
<h2>On a Phone</h2>
</template>
一个main
帮手改变的基础上Meteor.isCordova
价值environment
变量。
Template.main.helpers({
environment: function() {
return Meteor.isCordova ? "mobile" : "web");
}
});
这可能是过于简单,不涉及任何路由,但在客户机上服务本质上是两个不同的应用程序的方式,似乎工作。
谢谢你的回答。自从我前一段时间提出这个问题以来,同时我实施了@Guidouil指出的解决方案。虽然您的解决方案有效,但对我而言,主要的问题是这两个应用程序分别在Web和Cordova客户端上提供,除了安全问题(WebApp已有),我还没有找到优雅,节省空间的方法管理员权限)。出于这个原因,我喜欢两个完全不同的Meteor项目,通过链接的通用文件夹连接,并且还需要连接MongoDB(请参阅上文)。 – user3819370 2015-01-21 14:50:09
虽然OP是在10个月前,但这是一个我一直试图让我的头脑一段时间的问题,并且发现远比有用链接更多的死角,因此我将其添加到帮助指导其他人对于我所了解的是Meteor中针对此用例的最佳解决方案。
提供两个或更多专门针对应用程序(即传统Web应用程序和混合移动应用程序)的最简单和最优雅的方法是使用Meteor的套件功能。
软件包允许您创建单个代码包并仅在特定情况下注入它们,即:mobile会要求移动包以及核心服务器包正常工作,但会排除仅限Web的内容包。这样,专用资源就不是不必要的软件包和分发,从而保持较低的加载时间和存储空间。
有几个基本的boilerplates,你可以检查,甚至建立自: https://github.com/Compy/meteor-mobile-desktop
https://github.com/danielfbm/meteor-cordova-web-example/tree/master/packages
的一个大疑难杂症需要提防使用包是需要文件引用手动添加到api.add_files声明相关的package.js文件,否则该包将无法识别并将它们包含在构建过程中。
请注意,Meteor.isClient
是true
在任何客户端环境,包括手机。
if (Meteor.isClient && !Meteor.isCordova) { // here comes web }
你的意思是你没有我的问题:所以你的情况,如果你是在网络这种方式,您可以测试。 但是,谢谢,是的,之前我曾考虑过这种可能性,但由于我不太熟悉NodeJS和MongoDB的内部,我认为可能由于同时运行2个Meteors而出现问题,所以会有两个mongo实例。那么可能存在缓存或同步问题。但这就是我可能接下来要尝试的。 大部分情况下,如果两个应用程序看起来都一样,那么它就是一个“简单”应用程序。 就我而言,Cloud-Service是智能手机的中央控制服务,它具有更多的功能,因此它不可能完全相同,这就是为什么。 – user3819370 2014-11-15 10:48:25
@ user3819370这个想法并没有那么糟糕,您可能只需运行2个流星实例并共享相同的MongoDB [请参阅此处](http://stackoverflow.com/questions/13115723/how-can-i-share-mongodb- meteor-apps之间的集合)注意到mongoDB上的变化现在被实时触发(因为在2012年,传播每隔10秒就不是这种情况) – 2014-11-30 18:51:27
这就是我一直在寻找的东西。似乎可能的解决方案,thx。 不知何故,因为对于复杂的应用程序,它实际上是两个不同的应用程序,网站和智能手机应用程序。文件可以通过softlink共享,将试用并分享我的结果。 – user3819370 2014-11-30 20:14:12