0

概要: Jeditableにonsubmitまたはコールバックを提供しようとすると、エラーが発生します。onresetObject [function] has no method 'apply'

ここにたどり着いた方法: Railsプラグインを使用して、インプレースWYSIWYG編集用のJeditableとjWYSIWYGを提供しています。開発は、私が取り組んでいる特定の機能を要求するRailsプロジェクトによって推進されています。

私が追加したオプションの1つは、この回答で提案されているパターンに従って、編集可能なテキスト自体をクリックする代わりに、ボタンを使用してJeditableの編集モードをトリガーする機能でした。ただし、次のステップは、編集モードではボタンを非表示にし、編集モードを終了するとボタンを再び表示することです。

隠すのは簡単です。.toggle()ボタンに送信するトリガー関数に行を追加しました。明らかにするのは難しい。.toggle()送信またはキャンセル、そして有益なことに、Jeditableオファーonsubmitonresetコールバックを再度行う必要があると思います。

ただし、これらのコールバックを使用しようとすると、このObject [something] has no method 'apply'エラーが発生します。

私が試していること:これはRailsヘルパーのコンテキストであるため、実際のメカニズムはこれよりも少し複雑ですが、結果として、このパターンに従おうとして、引数でJeditableを渡そうとしています。

"onsubmit":"showTrigger",

次に、このスクリプトを含めます。

function showTrigger(settings, original) {
    $(".edit_trigger[id='element_id']").toggle();
}

ただし、変更を送信したり、編集をキャンセルしたりすると、エラーが発生します

Object showTrigger has no method 'apply'

...上記のように。

また、引数として関数を直接送信してみました"onsubmit"(つまり"onsubmit": "function(settings, original){$(\".edit_trigger[id='element_id']\").toggle();}"、代わりに取得Object function(settings, original){$(\".edit_trigger[id='element_id']\").toggle();} has no method 'apply'します。

このコールバックの処理方法に問題があるはずです。何か案は?

ETA:この回答は、代わりに関数を期待しているときに、どういうわけかJeditableに文字列を提供していることを示唆しています。ただし、私はRailsヘルパーのコンテキスト内で作業しているため、それを修正する方法がまったくわかりません。"showTrigger"ビットはヘルパーでRuby変数として設定されwindow.showTrigger()、ウィンドウが読み込まれるときに定義されますが、ページの読み込み時に関数として認識されるように、Ruby変数内でその関数を指定する方法がわかりません。

4

1 に答える 1

0

As my ETA above suggested, the problem did turn out to be passing a string rather than a function. My Rails helper was generating arguments for Jeditable by taking an argument hash and using .to_json. This made the string function name into, well, a quoted string. In order to provide this argument as a function name Jeditable would understand, I needed to include these specific arguments as a pre-JSON-ified argument.

In other words, instead of defining a Ruby variable which contained a string with the name of the function, I defined it containing the JSON object with the name of the function. Instead of trigger_reset = 'showTrigger' I used trigger_reset = '{ onsave: showTrigger, onreset: showTrigger }'.

Then, instead of including this as another argument in the args hash, where that hash was added to the args object in JS using $().extend(), I added the value of the trigger_reset variable as a third argument to extend().

Of course, this turns out to all be bound up in code I didn't include in my original question, so it's no wonder nobody could help. Sorry, and thanks anyway.

于 2012-11-19T16:57:43.933 に答える