0

Djangoとdjango-dynamic-formsetプラグインを使用して、JQuery Mobile(JQM)サイトを生成しています。ユーザーがフォームの別の行への「追加」リンクをクリックできるようにするネストされたフォームがあります。これはJQMがなくてもうまく機能しますが、JQMを使用してフォームウィジェットのスタイルを設定すると、ラジオボタンのラベルが正しいラジオボタンをトリガーしません。

生成されたHTMLに基づいて、動作の静的な例を示しました。[追加]リンクをクリックして、追加したアイテムの重大度を選択してみてください。ラベルの「for」属性は正しく更新されているように見えるので、何が間違っているのかわかりません。

django-dynamic-formsetガイドには、ユーザーが[追加]ボタンをクリックした後にJavaScript関数を呼び出す方法が記載されていますが、問題を解決するために呼び出す必要のあるJQMメソッドがあるかどうかはわかりません。JQMのenhanceWithin関数を使用すると、ページの読み込みがトリガーされ、フォームがまだ検証されないため、その時点では必要ないDjangoにフォームが送信されます。

編集:同じURLにもっと良い例をアップロードしました。

4

1 に答える 1

1

十分なカフェインとピーナッツのM&Mの後、私はそれを理解しました。

失敗の理由: django-dynamic-formset(DDF)プラグインは、指定したフォームを複製します。ただし、フォームはそのまま複製され、すでにすべてのJQuery Mobile(JQM)処理が含まれています。これにより、JQMはそれを無視し、ラジオボタンの動作を誤らせます。

解決策: DDFプラグインを使用すると、パラメーターによって複製するフォームを指定できformTemplateます。JQMを使用すると、特定の要素の自動モバイル拡張を無効にすることができます。拡張されていないバージョンのフォームを作成し、それをとしてDDFに渡しますformTemplate

詳細: JQMを参照する前に、これをHTMLヘッドに配置しました。

<script>
    $(document).bind('mobileinit',function(){
        $.mobile.ignoreContentEnabled = true;   // required for using the natural forms
    });
</script>

そして、私の「自然な」形を隠すためにこのスタイルを含めました:

<style>
    .natural-form { visibility: hidden; display: none; }
</style>

Djangoコードに、を追加し、その中にダミーバージョンのフォームを配置しました(後で参照できるように、別のフォームを一意のIDで<div class='natural-form>囲むようにしてください)。<div>DDFの初期化では、パラメーターとして一意のIDを指定しformTemplateます。

別のフォーラムで、これを機能させるにはDDFとJQMをハックする必要があると言われました。私は、これらのライブラリの両方の設計に感銘を受けました。JQueryの初心者がすべての要素を適切な場所に貼り付けて、そこから何かを引き出すことができるほど柔軟です。

于 2012-06-13T05:36:06.450 に答える