0

g:selectrequest メソッドを呼び出している remoteFunction を起動する onchange イベントを持つものもありますが、コールバック JS 関数は呼び出していません。

これは g:select です:

<g:select id="categories"
          name="categories"
          from="${Category.findAll('from Category where master is null')}"
          noSelection="['':'- Selecione -']" optionKey="id" optionValue="description"
          onchange="${remoteFunction(
                  controller: 'event',
                  action: 'subCategoriesJSON',
                  params:'\'id=\' + escape(this.value)',
                  onSuccess: 'updateSubs(data,textStatus)'
          )}"
/>

subCategoriesJSONも呼び出されますが、その後で remoteFunction を呼び出してupdateSubs関数を呼び出す方法はありません。私のページは、head タグで関数のスコープを正しくレンダリングしています。

これは機能です:

<script type="text/javascript">
    $(document).ready(function() {
        function updateSubs(data, textStatus) {
            alert('call me!!!');
            var subs = eval("(" + e.responseText + ")");

            if (subs) {
                $("span#saida").html(subs);
            }
        }
    });
</script>

手がかりは大歓迎です。どうもありがとう!

4

1 に答える 1

2

updateSubsローカル関数として定義されているように見えます。つまり、グローバル スコープからはアクセスできません。基本的にupdateSubs関数を外に移動します$(document).ready()。その関数を定義する前に dom の準備ができるまでコードを待機させる必要がないため、実際にそこにある必要はありません。

これで主な問題は解決するはずですが、名前付きのe.responseText変数にアクセスできないときにアクセスしようとすると、コードをさらに編集する必要があります。修正されるまでエラーが発生します。今のところ問題のコードをコメントしました。e

とにかく、updateSubsグローバルスコープに入ると、onSuccessハンドラーはそれにアクセスできるはずです。

<script type="text/javascript">
    function updateSubs(data, textStatus) {
        alert('call me!!!');
        //var subs = eval("(" + e.responseText + ")");
        //if (subs) {
        //    $("span#saida").html(subs);
        //}
    }
    // I'm not sure if you actually need this ready function..?
    $(document).ready(function() {
        // if you define a function in here it will only be accessible 
        // from within the scope of this function.
    });
</script>

関数スコープの詳細については、ネストされた関数とクロージャについてお読みください。

于 2012-08-27T00:52:34.177 に答える