2012-05-18 11 views
5

Sto utilizzando KnockoutJS con SammyJS per un'applicazione di una pagina.Come impedire il modulo di invio

Nel html ho forma tag come segue

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

e nel mio ViewModel, dichiarato due funzioni e Sammy percorso 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()); 

Tutto il codice funziona bene, fino a quando si digita qualcosa nel campo testo quindi inviare il modulo. Mi aspettavo che l'URL non scorresse dopo la finestra di avviso, ma l'url è cambiato in qualcosa del tipo "http: // localhost: 8258/undefined?" il mio URL originale è "http: // localhost: 8258"

Ho dubitato del routing di URL sammy, quindi ho rimosso il codice sammy dal codice javascript, quindi l'URL non cambia dopo la finestra di avviso. Forse non capisco come funziona sammy.

Come evitare che l'URL lo cambi in questo caso?

+0

hai provato tornando 'false' dal' funzione self.search'? –

+0

grazie Gene, ho notato che non ho impostato il percorso postale in Sammy. – Ray

+1

Punto minore ... poiché 'self.name' è una funzione, dovresti chiamare' alert (self.name()) '. –

risposta

5

Sammy si associa ai moduli per consentire di registrare percorsi anche per loro.

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

JS:

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

     return false; // avoid form submission 
    }); 

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

Ho anche avuto questo problema e ho trovato una soluzione in this answer. Ecco come si può fare Sammy.js di lasciare le forme da solo:

Sammy(function() { 

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


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

}).run(); 

funziona come dovrebbe :)

Problemi correlati