2014-12-13 3 views
0

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

Router.route(/^\/(accounts)|(contacts)|(forecasts)|(analytics)|(activities)/, function() { 
    // which one did it match? 
    console.log("matched "+this.params) //this returns an array of five params 
} 

как я имею в виду совпадающий параметра внутри функции?

this.params возвращает массив из пяти параметров с четырьмя из них undefined, а другой соответствующий, но который определен, зависит от того, что соответствовало, поэтому это не очень полезно.

ответ

0

Это типичный сценарий для пользовательского контроллера маршрута Iron.Router! Проверьте руководство here Если вам нужен код, сообщите мне. ;)

[Редактировать]

  1. Во-первых, вы определили контроллер маршрута для всех ваших сайтов, которые наследуют от RouteController.

    BaseController = RouteController.extend({ 
        // Put repeating logic for your sites here 
    }); 
    
  2. После этого необходимо определить свои маршруты seperatly, а не с помощью регулярных выражений. Это гораздо более модульный и обслуживаемый. Большая точка здесь, вы не должны найти с помощью сложных функций, сайт которых является текущим.

    Router.map(function(){ 
        this.route('accounts', { 
         path: '/accounts' 
        }); 
    }); 
    
  3. Теперь, дайте ваши маршруты самостоятельно контроллер

    Router.map(function(){ 
        this.route('accounts', { 
         path: '/accounts', 
         controller: 'AccountsController' 
        }); 
    }); 
    
  4. В этом примере, ваши AccountsController потребности унаследовать от вашего нового BaseController. Положите весь маршрут логик, которая специфична только для этого маршрута, в вашем AccountsController

    AccountsController = BaseController.extend({ 
        // Put your specific route logic here 
    }); 
    
  5. Убедитесь, ваш BaseController загружается на метеоре перед вашими маршрутами. ЗАКАНЧИВАТЬ Метеор File Load Order .Вы можете сделать что-то вроде следующего

    client/routes 
    client/routes/routes.js 
    client/routes/controller/AccountsController.js 
    client/routes/controller/BaseController.js 
    
+0

Вы можете немного рассказать об этом?Я проверил руководство, но я не уверен, как здесь помогает использование настраиваемого контроллера маршрута. – illuminaut

+0

проверить мой ответ. :) – Ron

+0

Спасибо. Это полезно, и я вижу, как это выглядит лучше во многих отношениях. Я могу идти туда, но я должен был упомянуть, что я использую регулярное выражение для шаблона кода в прототипе. Вместо маршрута ловли, я знаю, какие маршруты действительны, но все они используют один и тот же заглушка. В конце концов, я могу перенести некоторые из этих путей, когда я заполняю эту часть приложения, но вначале я хочу что-то, что не нуждается в большом количестве кода и может быть легко добавлено/удалено, следовательно, регулярное выражение. – illuminaut

1

Я был в состоянии использовать this.params в конце концов, переписав регулярное выражение следующим образом:

Router.route(/^\/(accounts|contacts|forecasts|analytics|activities)/, function() { 
    console.log('matched: '+this.params[0]); 
} 

Не уверен, что это лучший способ, чтобы обратиться к спичечной регулярное выражение Тхо.

+1

Почему бы не использовать 5 различных маршрутов? Это похоже на менее читаемую версию того же самого. – stubailo

+0

Потому что в финальной версии будет много повторяющейся логики внутри разных маршрутов. – illuminaut

1

Я думаю, что лучший способ сделать это - использовать цикл для определения нескольких маршрутов.

_.each(["accounts", "contacts", "forecasts"], function (path) { 
    Router.route(path, function() { 
    // inside here you can reference path 
    }); 
}); 

Использование одного маршрута со многими несвязанными дорожками кажется мне взломанным.

Смежные вопросы