【问题标题】:Weird redirect using data-bind submit, sammy.js and knockout.js together使用数据绑定提交,sammy.js 和 knockout.js 一起进行奇怪的重定向
【发布时间】:2013-01-29 11:10:59
【问题描述】:

我的页面上有这样的表格:

<form data-bind="submit: AddFolder"></form>

如果我在我的 JS 脚本中有这段代码(当然我已经删除了所有不相关的代码并进行了测试以确保我仍然可以只使用这段代码重新创建,通常你会在里面有更多的代码,比如 .get和 .post 函数):

Sammy(function() {
}).run();

提交表单后,页面会重定向到一个奇怪的 URL,例如 ?ko_unique=1

如果我从脚本中删除 Sammy 部分,则不会发生这种情况。我认为这与事件冒泡有关,Sammy 和 Knockout 都挂钩了 onSubmit,而浏览器只尊重最后一个调用函数的返回值。

【问题讨论】:

  • 至少对我来说,它添加的字段是 ko_unique_1=true,我带来这个事实只是因为我在 Google 上搜索了它,但什么也没出现。如果这个页面这么说,我会在几天前解决这个问题!

标签: knockout.js sammy.js


【解决方案1】:

经过大量搜索,在 SO 上没有找到任何答案,我最终找到了这个:

https://groups.google.com/forum/?fromgroups#!topic/sammyjs/EYW-2Ygk3z8

并将我的代码修改为:

Sammy(function() {

    // Override this function so that Sammy doesn't mess with forms
    this._checkFormSubmission = function(form) {
        return (false);
    };

}).run();

这样当表单提交到我的页面时,Sammy 就不会尝试做任何特别的事情。由于我使用的是 Knockout,因此我不打算将 Sammy 用于任何形式。如果你想要更复杂的代码或插件版本,你可以查看上面的 URL,但对我来说,我怀疑对于大多数使用 KO 的人来说,禁用这个 Sammy 功能会更少代码,更容易。

【讨论】:

  • 是的。刚刚杀死了好几个小时,想知道为什么我的表单提交在敲除时按预期工作,但是当一个神秘的新路径(我的域的根)被应用为位置并且绑定到 '' 的 sammy 路由接管时,结果完全消失了。哎呀。
  • 这里也一样,要花几个小时才能找到它,谢谢发布解决方案。这样做的干净方法可能是将其包装到一个 sammy 插件中,如最后一个 google 小组帖子之一中所建议的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
相关资源
最近更新 更多