2012-05-18 16 views
5

私は1ページアプリケーションにSammyJSでKnockoutJSを使用しています。私はフォーム送信を防止する方法

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

、私のviewmodelでに従うようにformタグを持つHTMLで

は、私がテキストボックスに何かを入力するまで、すべてのコードは、良い作品の二つの機能とサミーのルート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?」のように変更されました。 私の元のurlは "http:// localhost:8258"

私はサミーURLのルーティングを疑ったので、JavaScriptコードからサミーコードを削除してから、アラートウィンドウ後にurlは変更されません。 サミーがどのように機能するのか分かりません。

この場合、URLを変更しないようにするにはどうすればよいですか?

+0

:)をする必要があり、あなたの 'self.search'関数から' false'を返すを試してみましたか? –

+0

ありがとう、ジーン、私はサミーにポストルートを設定していないことに気づいた。 – Ray

+1

マイナーポイント... 'self.name'は関数なので、' alert(self.name()) 'を呼び出す必要があります。 –

答えて

5

Sammyはフォームに自身をバインドして、ルートを登録することもできます。

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

JS:

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

     return false; // avoid form submission 
    }); 

    // ... 
}).run(); 
3

また、私はこの問題を抱えていたと私はthis answerで解決策を見つけました。ここでは、一人でフォームを残して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(); 

作品は

関連する問題