2013-04-02 3 views
1

Я пользуюсь приложением https://github.com/thinkadoo/Projects. Я создал подобное приложение с помощью этого. Мое приложение использует диаграммы d3 вместо используемого. Мое приложение инициализирует маршрутизаторы какКак реализовать маршрутизатор в CanJS

var patientStatus = new PatientStatus('#application', {'credentials':Credentials,'secret':Secret}); 

Теперь, если я хочу реализовать Router, то какие изменения должны быть сделаны? Вот мой JSFiddle с обеими реализациями. Первый работает. Но более поздняя часть, где я инициализирую Router, кажется, не работает. http://jsfiddle.net/sweety1112/YMAjm/

Может кто-нибудь мне помочь.

ответ

3

Вот updated Fiddle, который показывает, как работает маршрутизация:

var Router = can.Control({ 
    defaults: {} 
    }, { 
    init: function() { 
     // this.element.html(can.view('#index', {})); 
    }, 

    ':type/:id route': function(data) { 
     console.log('Type:', data.type); 
     console.log('Id:', data.id); 
    } 
    }); 

    can.route.ready(false); 
    new Router('#content'); 
    can.route.ready(true); 

В принципе, что вы делаете это инициализировать именованные заполнители и сообщить контроллеру, что это должно быть обработано с помощью route процессора. Теперь, если вы перейдете на URL-адрес, например #!test/23, данные обработчика будут содержать type и id.

+0

Привет, Большое спасибо. Это работает. Я выполнил ваши действия в соответствии с вашим предложением, но теперь моя проблема заключается в том, что вызывается только первый контроллер, а остальные маршруты направляются на один и тот же. У меня есть много маршрутов, таких как Projects, Status, Detail и т. Д. После запуска кода, упомянутого в скрипте, каждая ссылка показывает представление проектов. Вот jsfiddle: http://jsfiddle.net/sweety1112/YMAjm/1/. Есть ли ошибка в моем коде? –

+0

Мой URL выглядит следующим образом: 1.MyProjectHub/index.html #! Projects, 2./MyProjectHub/index.html#!status, 3./MyProjectHub/index.html#!detail –

+0

Вам не нужен ':' , Это указывает на переменную. Если вы хотите сопоставить фактический маршрут, просто напишите его как «project route», который будет точно соответствовать «#! Projects». – Daff