1

テンプレートでレンダリングされる JASONList 型のGrails変数があります。

JavaScript 関数内からこのリストにアクセスする方法はありますか?

onresize を画面上のすべてのオブジェクトに合わせたいとしましょう。データベース呼び出しを行ったり、Ajax からリスト全体を再取得したりせずに...

テンプレートが次のようなことをするとしましょう:

<g:each var="report" in="${reportList?.myArrayList}">
  <li style="display:inline; list-style:none;">
    <img src="  ${report?.img}">
  </li>
</g:each>
<script type="text/javascript">
    function resize(list) {
        if (list.size <givenSize) // Pseudocode
            list.subList() // Pseudocode
    }
    window.onresize = resize("${reportList}")
</script>

これに関する問題は、何らかの理由で Grails gsp が "${reportList}" をリストとしてレンダリングしないことです。代わりに、文字列「${reportList}」としてレンダリングします。

私はおそらくこの問題を完全に間違っていると考えていますが、これらのオブジェクトのサイズを変更したり、document.getElementById またはその性質のものを使用して取得したりする方法はありますか?

$reportList は、JSON 変換としてPOJOによって入力されます...

4

4 に答える 4

4

Grails 変数はサーバー側にのみ存在します。JavaScript はブラウザー (クライアント側) で実行されます。ブラウザーに送信されるものはすべて文字列であるため、Grails を使用して のような JavaScript を生成することはできますが、ブラウザーには評価される文字列window.onresize = resize("${reportList}")しか表示されません。${reportList}

つまり、Grails を使用して変数をresize()JavaScript 関数に渡す場合、パラメーター ( list) は文字列のみになることを意味しますlist.sizelist.subList()変数listもはやリスト; それは単なる文字列です。

于 2010-10-10T14:23:06.370 に答える
0

${reportList} が ${reportList} としてレンダリングされている理由がわかりません。

var t = "${taskList}";

HTMLで次を取得します。

var t = "[com.wbr.highbar.Task : 1, com.wbr.highbar.Task : 4, com.wbr.highbar.Task : 2, com.wbr.highbar.Task : 5]";

とはいえ、JavaScript は reportList をどう処理するかを認識していないため、問題は引き続き発生します。純粋な JSON の場合は、eval() して JavaScript オブジェクトに変換する必要があります。

于 2010-10-11T14:44:25.193 に答える
0

わかりませんが、Grails はscriptタグ内の式を評価したくないのかもしれません。動的に生成されたスクリプトはあまり良い方法ではありません。

ただし、正確な原因が見つかるまで、次のようなことを試すことができます。

<g:each var="report" in="${reportList?.myArrayList}">
  <li style="display:inline; list-style:none;">
    <img src="  ${report?.img}">
  </li>
</g:each>
<%= """<script type=\"text/javascript\">
function resize(list){
  if(list.size <givenSize) //posudo code
     list.subList() // psudocode
}

window.onresize = resize(\"$reportList\")
</script>""" %>
于 2010-10-10T06:07:44.067 に答える
-1

私は自分の問題を理解しました。基本的に、Grails で POJO を使用している場合、JSON 変換としての Grails はあまりスマートではありません。潜在的にすべてのパブリックアクセサーなどを調べるのではなく、オブジェクトの toString を実行するだけです。

少し残念ですが、基本的には POJO の toString メソッドで JSON 変換を作成する必要があります。

于 2010-10-15T16:38:44.380 に答える