流星:科尔多瓦和网站的不同(铁路)路线

时间:2014-11-14 19:32:25

标签: javascript cordova service meteor iron-router

我想分别使用不同于网站或WebApp的Smartphone-App构建服务。 我的想法是在铁路由器中使用不同的路由表,如下所示:

/客户端

  • routes.js

/科尔多瓦

  • routes.js

...

此外,文件可以用" if(Meteor.isCordova){"和#34; 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?这有什么意义吗?

知道如何修复它或如何解决这个问题?

example-app localmarket只有智能手机应用程序,所以只有1个router.js文件,如果你已经登录,那么WebApp看起来和手机上的差不多。

此致

5 个答案:

答案 0 :(得分:3)

我是Meteor的新手,但我发现这种方法似乎有效:

我有webmobile两个不同的父模板。还有main模板,可根据environment变量动态提供其中一个模板。

<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帮助器会根据environment的值更改Meteor.isCordova个变量。

Template.main.helpers({
  environment: function() {
    return Meteor.isCordova ? "mobile" : "web");
  }
});

这可能过于简单,并且不涉及任何路由,但作为在客户端上基本上服务两个不同应用程序的方式,它似乎有效。

答案 1 :(得分:2)

请注意,Meteor.isClient在任何客户端环境中都是true,包括移动设备。因此,在您的情况下,您可以通过这种方式测试您是否在网络中:

if (Meteor.isClient && !Meteor.isCordova) { // here comes web }

答案 2 :(得分:1)

看起来似乎很愚蠢,但也许你应该做两个流星应用程序,一个用浏览器和服务器,移动版本作为独立连接到服务器。您必须在开发部分期间共享全局和服务器文件夹,但这可能是最直接的工作方式。就我而言,我在网络和应用程序上做同样的事情,所以我不能解决你的问题......

答案 3 :(得分:1)

虽然OP是在10个月之前,但这是一个我一直试图解决一段时间的问题,并且找到了比有用链接更多的死角,因此我添加这个以帮助指导其他人我所学到的是Meteor中针对此用例的最佳解决方案。

提供两个或更多专门针对的应用程序(即传统的网络应用程序和混合移动应用程序)的最简单,最优雅的方法是使用Meteor的软件包功能。

软件包允许您创建单独的代码包并仅在特定情况下注入它们,即:移动设备需要移动软件包以及核心服务器软件包才能运行,但会排除仅限Web的内容软件包。这样,专用资源就不是包而且不必要地分配,从而使加载时间和存储空间更低。

您可以检查甚至构建一些基本的样板: https://github.com/Compy/meteor-mobile-desktop

https://github.com/danielfbm/meteor-cordova-web-example/tree/master/packages

需要注意使用包的一个重点是需要手动将文件引用添加到相关package.js文件的api.add_files声明中,否则包将无法识别并将它们包含在构建过​​程中。 / p>

答案 4 :(得分:0)

一个简单的解决方案是为每个版本添加不同的basePath,如:&#34; / mobile / main&#34;和&#34; / desktop / main&#34;。在移动设备上,您只需确保从移动路线开始,并且还需要处理404错误,这样您就不会将移动客户端重定向到桌面路线。