2012-05-11 4 views
0

Я создаю приложение Sammy, и я хочу использовать Haml для него. Выглядит хорошо.Sammy.js - Оказание внешнего вида

app = $.sammy '#main', -> 
    @use 'Haml' 

    # Get some server data 
    $.getJSON '/some-data', (data) -> 
     # Hic sunt ponies 

    @get '#!/', -> 
     @partial '/tmpl/maintenance.haml' 

    @ 

$ -> app.run '#!/' 

У меня есть шаблон /tmpl/navbar.haml, что я хотел бы, чтобы сделать перед любой маршрутизации. Причиной этого является то, что navbar зависит от некоторых данных, которые я получаю с сервера - снова, до маршрутизации.

Так как я могу визуализировать шаблон за пределами маршрута? У Сэмми, похоже, нет метода для этого, только внутри RenderContext, например. маршрут.

ответ

1

Я «местоположения изменено» событие, может быть не идеальным, но, кажется, работает:

this.bind('location-changed', function(context) { 
    var url = escape(app.getLocation()); 
    if (app.connected()) { 
     $('#welcome').html(i18n('text_logged', 'index.php/account/account', app.connected().firstname, 'index.php/account/logout?_url=' + url)); 
    } else { 
     $('#welcome').html(i18n('text_welcome', 'index.php/account/account?_url=' + url, 'index.php/account/register?_url=' + url)); 
    } 
}); 

Где app.connected является проверка сессии. И '#welcome' находится вне элемента $ sammy и должен присутствовать.

Вы можете использовать context.load для шаблона.

+0

Ах, спасибо. Это не на 100% то, что я буду использовать, но вы натолкнули меня на хорошее решение: я могу использовать 'around', потому что он вызывается в' RenderContext', может также иметь 'this.load'. – Lanbo

+0

Отлично, я бы тоже сказал об этом :) – avalez