0

非常に特殊なケースで助けが必要です。

特定のビューのレイアウト動作をオーバーライドしたいと考えています。何をすべきかを説明しているRhodesのドキュメントを見つけました。(Rhodes のドキュメントのコピーがこのテキストの最後に貼り付けられています)

2 番目の方法 (「コントローラーでレイアウト メソッドを呼び出して、デフォルトのレイアウト名を上書きする」) を使用しようとしましたが、うまくいきませんでした。コントローラーのコーディング方法を誤解している可能性があるか、できれば構文エラーのみが発生している可能性があると思います... アプリケーションの詳細については、以下を参照してください。

どうすればいいのか教えてください。正しい構文は何ですか? または、別の方法を使用する必要がありますか?

前もって感謝します。

ルイ・デシェーヌ

アプリケーションと私が行ったことに関するいくつかの情報を次に示します。

  • 簡単なアプリケーション
  • ビルドはiPhone用です
  • 「電卓」ビューでアプリ起動
  • 「電卓」ビューの呼び出し 「ヘルプ」ビューを呼び出す「コントロール」ビュー
  • アプリの構造:

    app/
    ->  index.erb                        (Control view)  
    ->  layout.erb                       (Standard layout)  
    ->  calculatorlayout.erb             (Customize layout for Calculator view)  
    ->  calculator/  
    ----->    index.erb                  (Calculator view)  
    ----->    calculator_controller.erb  (Controller to be able to override layout)  
    ->  help/  
    ----->    index.erb                  (Help view)
    
  • Calculator_controller.erb を作成しました

    require 'rho/rhocontroller'
    
    require 'helpers/browser_helper'
    
    class CalculatorController < Rho::RhoController
    
    include BrowserHelper
    
    layout :calculatorlayout (Thats what  Rhodes doc mentionned to do)
    
  • 私が言ったように、これはうまくいきません。正しいやり方を教えてください。

  • 注: 一時的な措置として、app/calculatorlayout.erb を app/calculator/layout.erb にコピーしました。これにより、アプリが「Caculator」ビューで起動したときにレンダリングが行われますが、「About」ビューに移動して戻ると、 「電卓」ビューへ 電卓のレンダリングは標準レイアウトで行われます。

--------ロードスのドキュメント---------------------------------------- ----

レイアウトの動作をオーバーライドまたはカスタマイズする場合は、次のパラメーターを使用してレンダリング関数を呼び出すことができます。

render :action => 'index', :layout => 'mycustomlayout', :use_layout_on_ajax => false

最初の引数は、レンダリングしたいアクションです。次は (オプションの) レイアウト名で、アプリケーション ルートをベース ディレクトリと見なします。上記の例では、Rhodes はアプリケーションのルート ディレクトリで「mycustomlayout.erb」というファイルを探します (レイアウト テンプレートの使用を無効にするために :layout => false を使用することもできます)。use_layout_on_ajax 引数は、Ajax 呼び出しでレイアウトを使用するかどうかを Rhodes に伝えます (デフォルトは false)。

コントローラでレイアウト メソッドを呼び出して、デフォルトのレイアウト名を上書きできます。

レイアウト:mycustomlayout

これにより、レンダー呼び出しで、このコントローラーのすべてのアクションのデフォルト レイアウト ファイルの代わりに mycustomlayout.erb を使用するようになります。


4

2 に答える 2

0

In the controller, you need to specify an action method. The render method of an action is what handles the layout property. You cannot simply designate a layout for an entire controller. Below is an example controller file. You would then need an index.erb view file to correspond to the index action method.

CalculatorController.rb

require 'rho/rhocontroller'
require 'helpers/browser_helper'

class CalculatorController < Rho::RhoController
    include BrowserHelper

    def index
        # perform any logic or fetch objects for the index.erb view

        render :action => :index, :layout => 'calculatorLayout'
    end

end
于 2011-12-21T14:32:24.973 に答える