jquery mobile和knockout表单提交绑定

时间:2012-06-10 07:28:53

标签: forms binding jquery-mobile knockout.js submit

在形式提交行为方面,我偶然发现knockoutjs和jquery mobile之间明显不兼容。

考虑以下标记:

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

意图是淘汰会阻止服务器发布/获取,而是调用myKoSubmitAction。 jqm还会阻止jqm的标准提交行为,原因是表单提交被ajax请求替换。

因此,当淘汰赛(可能)成功阻止标准服务器请求时,它无法阻止jqm发送ajax请求。

我在谷歌小组中找到了这个问题的答案,并认为它也应该在SO上。见下文

2 个答案:

答案 0 :(得分:5)

您还可以将data-ajax="false"添加到<form>元素。

请参阅Submitting Forms

答案 1 :(得分: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;
    });
  }
};

用于标准提交ko绑定的地方:

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