2012-05-18 14 views
5

Estoy usando KnockoutJS con SammyJS para la aplicación de una página.Cómo evitar el envío de formulario

En el html tengo forma de etiqueta de la siguiente manera

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

y en mi modelo de vista, declararon dos funciones y Sammy ruta 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()); 

Todo el código funciona bien, hasta que yo escriba algo en cuadro de texto luego envíe el formulario. No esperaba una búsqueda en la URL después de la ventana de alerta, pero la URL se cambió a algo así como "http: // localhost: 8258/undefined?" mi url original es "http: // localhost: 8258"

Dudaba del enrutamiento de sammy url, por lo que eliminé el código sammy del código javascript, y luego la URL no cambia después de la ventana de alerta. Quizás no entiendo cómo funciona Sammy.

Cómo evitar que la URL lo cambie en este caso?

+0

han intentado regresar 'false' de su función' self.search'? –

+0

gracias Gene, noté que no configuré la ruta postal en Sammy. – Ray

+1

Punto menor ... dado que 'self.name' es una función, debe llamar a' alert (self.name()) '. –

Respuesta

5

Sammy se une a los formularios para permitirle registrar rutas para ellos también.

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

JS:

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

     return false; // avoid form submission 
    }); 

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

yo también tenía este problema y he encontrado una solución en this answer. Aquí es cómo se puede hacer Sammy.js a dejar las formas solas:

Sammy(function() { 

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


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

}).run(); 

Obras como debería :)

Cuestiones relacionadas