2012-05-18 54 views
5

Tôi đang sử dụng KnockoutJS với SammyJS cho một ứng dụng trang.Cách ngăn chặn gửi biểu mẫu

Trong html Tôi có dạng thẻ như sau

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

và viewmodel của tôi, đã tuyên bố hai chức năng và sammy url tuyến đường

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()); 

Tất cả các mã hoạt động tốt, cho đến khi tôi gõ một cái gì đó trong textbox sau đó gửi biểu mẫu. Tôi mong đợi không có trình duyệt url sau cửa sổ cảnh báo, nhưng url được thay đổi thành một cái gì đó như thế này "http: // localhost: 8258/undefined?" url ban đầu của tôi là "http: // localhost: 8258"

Tôi nghi ngờ định tuyến url sammy, vì vậy hãy xóa mã sammy khỏi mã javascript, sau đó url không thay đổi sau cửa sổ cảnh báo. Có lẽ tôi không hiểu làm thế nào sammy hoạt động.

Làm cách nào để ngăn thay đổi url trong trường hợp này?

+0

Bạn đã thử trở 'false' từ' chức năng self.search' của bạn? –

+0

cảm ơn Gene, tôi nhận thấy rằng tôi đã không đặt tuyến đường bưu điện ở Sammy. – Ray

+1

Điểm nhỏ ... vì 'self.name' là một hàm, bạn nên gọi' alert (self.name()) '. –

Trả lời

5

Sammy tự ràng buộc với biểu mẫu để cho phép bạn đăng ký tuyến cho họ.

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

JS:

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

     return false; // avoid form submission 
    }); 

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

Tôi cũng có vấn đề này và tôi tìm thấy một giải pháp trong this answer. Đây là cách bạn có thể làm cho Sammy.js rời các hình thức một mình:

Sammy(function() { 

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


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

}).run(); 

trình như nó nên :)

Các vấn đề liên quan