0

Grails用のDojoプラグインを使用して、dojox.grid.DataGridオブジェクトにデータを入力しています。現在、このグリッドに関連付けられているコントローラーアクションは、グリッドの内容を定義するJSONをレンダリングします。GSPの列を事前に定義している限り、これは問題なく機能します。ただし、私のアプリケーションでは、データベースクエリの結果に基づいて、列の数(および関連する名前)を動的に設定できる必要があります。このグリッドのJSON形式には列名が含まれていないため、GSPでag:eachタグを使用して名前を反復処理することはできません。

私はこのようなことをしたかったのですが、できません:

<dojo:grid controller='foo' action='getGridData' ...>
   <g:each in=${columns}>
       <dojo:col width="15%" name="{it}" field="{it}">{row.{it}}<dojo:col/>
   </g:each>
</dojo:grid>

背景用のDojoプラグインの具体例を示しましたが、これをGrailsに関するより一般的な質問に拡張したいと思います。JSONをレンダリングするコントローラーアクションによってGSP要素を構築している場合、ネストされた要素を構築するためにコントローラー内の他のものにアクセスするにはどうすればよいですか?これも可能ですか?私はまだWeb開発に慣れていないので、これらのコンポーネント間の接着剤の一部を誤解していると確信しています。

4

1 に答える 1

1

私があなたのコードで間違っていると思う主なことは、列データを誤って参照しようとしていることです。

<g:each in="${columns}">
   <dojo:col width="15%" name="${it}" field="${it}">{row.{it}}<dojo:col/>
</g:each>

変数in=を参照するために使用される値とドル記号を囲む引用符に注意してください。it

最後のビットについて

{row.{it}}

rowこの場合はどうなるのかわかりません。ですから、それをどのように修正する必要があるのか​​はわかりませんが、おそらくこれで正しい方向に進むことができます。

通常、1つのリクエストでGSPをレンダリングしてJSONを構築することはありません。ここで行われるのは、すべてのtaglibコードを取得してHTML/JavaScriptを生成するGSPをレンダリングすることです。次に、ブラウザがレンダリングすると、JSONをフェッチするためにAJAX呼び出しが行われます。

GSPがブラウザに到達するまでには、それは単なるHTMLであることに注意してください。

于 2012-10-25T19:51:11.943 に答える