2014-11-14 1 views
2

Я хочу создать Сервис с помощью смартфона-приложения, отличного от Веб-сайта или WebApp соответственно. Моя идея состояла в том, чтобы иметь различные таблицы маршрутизации в маршрутизаторе железа, например, так:Метеор: разные (железные) маршруты для Кордовы и веб-сайта

/клиента

  • routes.js

/Cordova

  • 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, работающих на моем сервере? Имеет ли это смысл?

Любая идея, как ее исправить или как решить эту проблему?

В локальном маркетинге example-app есть только приложение для смартфона, поэтому только 1 файл router.js, также, если вы вошли в систему, WebApp выглядит примерно так же, как и на телефоне.

С уважением

ответ

1

Это может показаться глупо, но, может быть, вы должны сделать два метеор приложения, один с браузером и сервером и мобильной версией в качестве автономного соединения с сервером. Вам придется обмениваться глобальными и серверными папками во время части dev, но это может быть самый прямой способ работы. На моей стороне я делаю то же самое для Интернета и приложения, поэтому я не получаю вашу проблему ...

+0

вы имеете в виду вы не мой вопрос. Но, спасибо, да, я думал об этой возможности раньше, но, поскольку я не слишком хорошо знаком с внутренностями NodeJS и MongoDB, я думал, что, вероятно, проблемы возникают из-за одновременного запуска 2 метеоров, было бы два монго. Тогда могут быть проблемы с кешированием или синхронизацией. Но это то, что я, вероятно, попытаюсь сделать дальше. В основном, если оба приложения выглядят одинаково, это «простое» приложение. В моем случае Cloud-Service является центральным управляющим сервисом для смартфонов, он обладает большей функциональностью, поэтому он не может быть идентичным, поэтому. – user3819370

+0

@ user3819370 идея не так уж плоха, вы можете просто запустить 2 экземпляра метеора и поделиться тем же MongoDB [см. Здесь] (http://stackoverflow.com/questions/13115723/how-can-i-share-mongodb- collection-between-meteor-apps) отмечают, что изменения в mongoDB теперь запускаются в реальном времени (как это было не в 2012 году, когда распространение проводилось каждые 10 секунд) –

+0

Это то, что я искал. Кажется возможным решением, thx. Имеет смысл, так как для сложных приложений это действительно два разных приложения, веб-сайт и приложение для смартфонов. Файлы можно разделить с помощью softlink, попробовать и поделиться своими результатами. – user3819370

0

Простым решением является добавление другого basePath для каждой версии, например: «/ mobile/main» и «/ настольные/главный». На мобильном телефоне вам нужно только убедиться, что вы запускаете мобильный маршрут, и вам также нужно обрабатывать 404 ошибки, чтобы вы не перенаправляли мобильный клиент на рабочий стол.

3

Я новенькая Метеор, но нахожу, что этот подход, кажется, работает:

У меня есть два различных родительских шаблонов для web и mobile. И шаблон 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"); 
    } 
}); 

Это может быть слишком упрощенным и не предполагает каких-либо маршрутизации, но как способ служения по существу два различных приложений на стороне клиента, кажется, работает.

+0

Благодарим вас за ответ. Поскольку я задал вопрос некоторое время назад, тем временем я реализовал решение, указанное компанией @Guidouil. В то время как ваши решения работают, для меня основная проблема заключается в том, что оба приложения подаются на Web- и Cordova-Client соответственно, что я просто не нашел изящными, экономичными по площади в дополнение к проблемам безопасности (у WebApp есть Права администратора). По этой причине я предпочел два совершенно разных проекта Meteor, связанных связанной общей папкой, а также монгодбс нужно подключить (см. Выше). – user3819370

1

Несмотря на то, что OP был 10 месяцев назад, это вопрос, который я тоже пытался найти в течение некоторого времени и нашел гораздо больше тупиков, чем полезные ссылки, поэтому я добавляю это, чтобы помочь другим к тому, что я узнал, является лучшим решением в рамках Meteor для этого варианта использования.

Самый простой и элегантный способ доставки двух или более специально ориентированных приложений (т. Е. Традиционного веб-приложения и гибридного мобильного приложения) - использовать функцию пакетов Meteor.

Пакеты позволяют создавать индивидуальные пакеты кода и вводить их только при определенных обстоятельствах, то есть мобильному устройству требуется мобильный пакет, а также базовый серверный сервер, чтобы он функционировал, но исключал бы только пакет контента только для Интернета. Таким образом, выделенные ресурсы не являются пакетами и распределяются без необходимости, сохраняя время загрузки и объем памяти ниже.

Есть несколько основных Макеты вы можете просмотреть или даже строить из: https://github.com/Compy/meteor-mobile-desktop

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

Один большой Гоча следить за использованием пакетов является необходимость вручную добавлять ссылки на файлы в api.add_files соответствующего файла package.js, иначе пакет не распознает и не включит их в процесс сборки.

2

Обратите внимание: Meteor.isClient является true в любых условиях клиента, включая мобильные телефоны. Так что в вашем случае вы можете проверить, если вы находитесь в Интернете таким образом:

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