1

質問は明らかかもしれませんが、これに対する適切な解決策をまだ見つけることができません。

メソッドが 1 つしかないコントローラーがあるとします。

class MyController extends Controller {
    public static Result sum(int op1, int op2) {
        return ok(op1 + op2);
    }
}

Routes ファイルもシンプルです。

GET /sum    controllers.MyController.sum(op1: Integer, op2: Integer)

さて、今私はテンプレートから呼び出すことができます:

@controllers.routes.MyController.sum(1, 2)

これはに翻訳されます

localhost:9000/sum?op1=1&op2=2

、またはこの URL をブラウザに直接貼り付けます。これはかなりうまくいきます。

しかし、これを行うためにajaxを使用することにすると、すべてがうまくいきません。私は js の第一人者ではないので、onClick ハンドラーをボタンに追加する jQuery を使用して小さな (そして悪いと思います:) オブジェクトを作成します。ここにあります:

entityController.setSumURL = function(sumURL) {
    this.sumURL = sumURL;
}

entityController.bindSumButton = function(buttonId, op1, op2) {
    $.get(entityController.sumURL, {op1: op1, op2, op2}, function(){
        alert("Done!");
    });
}

ここで、entityController.sumURL は /sum メソッドへの URL である必要があります。通常、ページ ビューをレンダリングするときは、次のように記述します。

@()
....
entityController.setSumURL("@controllers.routes.MyController.sum()")
....

しかし、sum メソッドには必須の引数があり、バインドされた URL がルートで定義された関数に渡されるパラメーターに依存できるため、アドレスを取得する方法がないため、これを行うことはできません。

問題は、引数なしで url からのみパスを取得する方法、またはそのような状況を回避するためにプロセス全体を再編成する方法です。

私の解決策は、ルートに表示される関数から引数を削除し、リクエストから直接クエリすることですが、私のプロジェクトは成長しており、メソッドに渡されるパラメーターを理解するのが難しくなることがあります。

4

1 に答える 1

2

zen タスクのサンプル アプリケーションを確認してください。

特に:

coffeescript に慣れていない場合は、このアプリをコンパイルして、coffeescript ではなく、出力された javascript を確認することをお勧めします。

また、ajax を使用してページの一部をリロードしている場合は、次を使用して jQuery をバインドすることをお勧めします。

$('.somePermanentContainer').on('click', 'selectorForClickable', function()...) 

そうしないと、DOM のその部分が再ロードされたときにバインドされていないことがわかります。

于 2012-08-14T10:44:57.963 に答える