5

我将 KnockoutJS 与 SammyJS 一起用于一页应用程序。

在 html 中,我有如下的表单标签

<form data-bind='submit: search'>
  <label>Find user:</label>
  <input data-bind='value: name' />
</form>

在我的视图模型中,声明了两个函数和 sammy route url

function ViewModel() {
    var self = this;
    self.name = ko.observable("");
    self.search = function () {
      alert(self.name);
    };

    Sammy(function () {
        this.get('#:id', function () {
           //do something....
        });           
    }).run();
}

ko.applyBindings(new ViewModel());

所有代码都运行良好,直到我在文本框中输入内容然后提交表单。我希望在警报窗口后没有 url 浏览,但 url 更改为类似“http://localhost:8258/undefined?”的内容 我的原始网址是“http://localhost:8258”

我怀疑 sammy url 路由,所以从 javascript 代码中删除了 sammy 代码,然后 url 在警报窗口后不会改变。也许我不明白 sammy 是如何工作的。

在这种情况下如何防止 url 改变呢?

4

2 回答 2

5

Sammy 将自己绑定到表单,以便您也可以为它们注册路由。

<form action="#1234" method="post">

JS:

Sammy(function() {
    this.post('#:id', function() {
        // do something...

        return false; // avoid form submission
    });

    // ...
}).run();
于 2012-06-19T22:22:23.440 回答
3

我也有这个问题,我在这个答案中找到了解决方案。以下是如何让 Sammy.js 不理会表单:

Sammy(function() {

    // Your routing.. 
    this.get('#:id', function () {
       //do something....
    }); 


    // Make Sammy.js leave the forms alone!
    this._checkFormSubmission = function(form) {
        return false;
    };

}).run();

像它应该的那样工作:)

于 2014-05-18T16:54:42.323 回答