2016-11-28 10 views
2

コントローラからビューにデータを渡すためのいくつかのGrails規約文書を読むにもかかわらず、少し不透明です。いくつかの基本的な質問:ここでGrailsレンダリングvコントローラにデータを渡すためのコントラクト

はいくつかの質問です:

1)「人のコントローラ用に作成された足場で、indexアクションはindex.gspに

respond Person.list(params) model:[personCount: Person.count()] 

でで終わり、リストはブラウザを使ってレンダリングされます:

<f:table collection="${personList}" /> 

私の質問はどこから来ましたか?別の言い方をすれば、コントローラ内のPerson.list(...)の出力はpersonListという名前のビューにどのように表示されましたか?あなたは

respond foo 

を呼び出し、fooが、それは「fooList」の名称で、コントローラに表示されます、リストである場合について一般化ルールはありますか?

2) "render foo"と言うだけでコントローラにオブジェクトを提供できる場合は、modelパラメータの目的は何ですか?すなわち

respond foo 

respond model:[foo: foo] 

の両方を使用してビューにアクセスできるのと同じように思え間にいくつかの違いがあります"${foo}"

3)最後に、差の簡潔な説明が何でありますか"応答する"と "レンダリングする"?どちらもコントローラからビューにデータを配信するようです。

+0

もし私の慰めがあれば、私は内部的な魔法を使うという点で非常に難解です。あなたの事例が正確に例に従わない場合、何が起こっているのか、どのように使用するのか分かりません。例えば。私は2つのオブジェクトで応答したいと思います。ドキュメントでは単一のオブジェクトをパラメータ(+引数のパラメータ)として渡すことしかできないので、これを行う方法はわかりません。追加のオブジェクトを渡すために引数パラメータを使用する必要がある場合、またはオブジェクトが2つある場合はオブジェクトの代わりに引数パラメータを使用する必要がある場合は、混乱させます。私は応答文書を読んで、レンダリングに多くの時間を節約するデバッグ –

+0

興味深いことに、私は数百のJSON APIと数千のUIコントローラをGrailsに書いています。 APIコントローラのメソッドと出力とUIコントローラのメソッドが重なっている状況がほとんどありませんでしたので、私の場合は応答が役に立たないでしょう。 –

答えて

1

したがって、ドキュメントはrespondrenderの両方を説明するうえで非常に良い仕事をしており、両者の違いを指摘しています。特に質問した質問。

しかし、私はとにかくそれらをここでお答えします:

  1. respondを使用する場合は、タイプに基づいて適切なモデル変数名を決定しようとします。したがって、例の場合、Person.list()Listを返します。モデル変数はpersonListになり、fooListの場合、fooListになります。詳細は、respondに関するドキュメント(具体例を参照)で説明しています。
  2. respondおよびrenderは、respondacceptヘッダー(またはファイル拡張子)に基づいて最も適切なモデルで返答しようとする点で異なります。 renderでは、acceptヘッダー(またはファイル拡張子)に関係なく、応答のレンダリングをより細かく制御できます。これは、両方のドキュメントの説明でも明確になっています。
  3. 違いの簡潔な説明が(ドキュメントから)respondrenderの両方の説明にあります

は応答:試みは 要求されたコンテンツの種類に最も適したタイプを返します(ヘッダを受け入れるか 拡張ファイルのいずれかで指定)

レンダリング:単純なテキストから異なる形式の応答をレンダリングするには、表示とテンプレートに レスポンスを送信します。

単にこれを置くために:「あなたは、応答タイプの多くの種類をサポートしてGrailsの規約をフォローしたいときrespondを使用して、あなたは応答型のより具体的な制御をしたいときrenderを使用

+0

ありがとうジョシュア。私が見ていたページは、GrailsがGoogleの検索で返すもので、バージョン3.1.1のドキュメントにリンクしています。これは非常に概略的です。新しいページが大幅に改善されました。 – user1023110

0

。私の質問はどここのpersonList変数がモデル変数名Fを生成します?

respond方法をモデルに、デフォルトで Personのリストを追加して

から来たのであり、クラス名はPersonです。

関連する問題