4

フォーム送信の動作に関して、knockoutjs と jquery mobile の間に明らかな非互換性があることに気付きました。

次のマークアップを検討してください。

<form data-bind="submit: myKoSubmitAction">
   <!-- form fields here -->
</form>

意図は、ノックアウトがサーバーの投稿/取得を防ぎ、代わりに myKoSubmitAction を呼び出すことです。jqm は、フォームの送信が ajax リクエストに置き換えられるため、jqm のみの標準的な送信動作も防ぎます。

そのため、ノックアウトは (おそらく) 標準のサーバー要求を防ぐことに成功しますが、jqm が ajax 要求を送信するのを防ぐことはできません。

Google グループでこの問題に対する答えを見つけたので、SO にもあるはずだと思いました。下記参照

4

2 に答える 2

5

要素に追加data-ajax="false"することもできます。<form>

フォームの送信を参照してください。

于 2013-01-11T23:46:52.497 に答える
4

私が見つけた最善の解決策は、次のカスタム ko バインディングです。

//This binding fixes apparent incompatibility between knockout and jqm
ko.bindingHandlers.jqmsubmit = {
  init: function (el, accessor, allbindings, vm) {
    ko.bindingHandlers.submit.init(el, accessor, allbindings, vm);
    $(el).submit(function (e) {
        // prevent the submit behavior
        e.preventDefault();
        e.stopPropagation();
        return false;
    });
  }
};

標準の submit ko バインディングの代わりに使用するには:

<form data-bind="jqmsubmit: myKoSubmitAction">
  <!-- form fields here -->
</form>
于 2012-06-10T07:30:17.247 に答える