2013-06-13 3 views
0

У нас есть некоторые рендеринга в нашем коде, который выглядит следующим образом:Как справиться с синатрой?

erb :login, :layout => :layout 
<%= erb :_maintabs %> 

Я просто хотел, чтобы изменить эти строки кода для некоторых один функций линии, как этот , который будет делать то же самое:

erb :login, :layout => Main::get_layout 
<%= erb Main::my_tabs %> 

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

+0

Что ожидаемый результат делает '<% = Еврорадио Main :: my_tabs%> 'или передача': layout => Main :: get_layout' 'erb'? Вы пытаетесь реализовать частичные? –

+0

Я хочу, чтобы иметь возможность использовать мои собственные плагины, чтобы добавить отладку gui на сайт, если я хочу улучшить диагностику. В противном случае все html должны быть одобрены командой разработчиков и сделаны довольно и т. Д. Я бы хотел иметь крючки в нашем приложении, чтобы я мог делать такие вещи – user1456508

+0

Я просто хочу иметь Main :: get_layout return: макет для проверенный код, таким образом, я могу легко переопределить Main :: get_layout в моем коде плагина, чтобы вернуть макет, который я хочу использовать. – user1456508

ответ

0

Когда я нахожусь в одном из маршрутов, который добавляется register(), он показывает, что я в классе Main, и что у Main есть метод erb(), поэтому, я думаю, я мог бы попытаться перегрузить его, сохранив исходный а затем вызвать оригинал, если я изменил параметры в середине или нет.

app.get '/index' do 
    puts '---------------- in idx ---------------------- ' + self.class.to_s 
    p self.methods 
    erb :index, :layout => :layout, :locals => {:test_runs => test_runs, :tests => tests} 
end 
0

это, кажется, работает, и это то, что я искал,

Я перегружать главный класс от моего плагина

class Main 


    def my_erb(view,opts={}) 
    new_view = view 
    # puts '--------------------------- in ERB for template: ' + view.to_s 

    if view.eql?(:layout) 
     new_view = :my_layout 
    elsif view.eql?(:_maintabs) 
     new_view = :_my_maintabs 
    end 
    # puts 'view is now ' + view.to_s 

    old_erb new_view,opts 
    end 

alias_method :old_erb, :erb 
alias_method :erb, :my_erb 



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