2013-01-03 32 views
11

Tôi đã không sử dụng Xác thực Knockout và tôi đang cố gắng để có được một cảm giác về những gì có thể được thực hiện với nó.Sự cố với mẫu thông báo tùy chỉnh loại bỏ thông báo

Tôi đang cố gắng tìm hiểu xem có thể hiển thị biểu tượng thay vì thông báo lỗi ở bên phải thẻ đầu vào khi có lỗi hay không. Và, nếu người dùng di chuột qua biểu tượng, thông báo lỗi sẽ hiển thị.

Có ai đã làm điều này hoặc có ý tưởng về cách thực hiện việc này không?

Cảm ơn.

EDIT: (ví dụ chi tiết hơn về những gì tôi đang cố gắng để làm)

Nói rằng tôi có những điều sau đây trong mô hình quan điểm của tôi:

var firstName = ko.observable().extend({required: true}); 

HTML của tôi:

<input data-bind="value: firstName" /> 

Sự hiểu biết của tôi là nếu hộp văn bản tên đầu tiên được để trống, thì (theo mặc định) một số văn bản sẽ được hiển thị ở bên phải của hộp văn bản cho biết rằng trường này là bắt buộc.

Những gì tôi đang cố gắng để hiểu là làm thế nào để thay đổi hành vi mặc định hiển thị lỗi văn bản ở bên phải để hiển thị một biểu tượng trên bên phải mà, khi được quét qua, sẽ bật lên thông báo lỗi.

Vì vậy, một sự khởi đầu sẽ là một cái gì đó như:

<div data-bind="validationOptions: {messageTemplate: 'myCustomTemplate'}">  
    <input data-bind="value: firstName" /> 
    <input data-bind="value: lastName" /> //also required 
</div> 
<div id='myCustomTemplate'> 
    //This icon should only display when there is an error 
    <span class="ui-icon ui-icon-alert" style="display: inline-block"/> 

    //css/javascript would display this when user hovers over the above icon 
    <span data-bind="validationMessage: field" /> 
</div> 

tôi không có đầu mối nếu tôi đang sử dụng tính năng messageTemplate một cách chính xác. Tôi cũng sẽ không biết những gì để ràng buộc các văn bản trong customTemplate để hiển thị thông báo lỗi chính xác cho mỗi lỗi. IOW, firstname và lastname có thể có thông báo lỗi tùy chỉnh. Nếu cả hai đều sử dụng cùng một mẫu, mẫu sẽ chứa thông báo lỗi tùy chỉnh như thế nào?

Tôi hy vọng điều đó có ý nghĩa.

+0

Một số mã sẽ là hữu ích để chỉnh giải pháp cho nhu cầu của bạn, nhưng câu trả lời là CÓ. Knockout cho phép bạn thiết lập thẻ div hoặc span tùy chỉnh bằng thuộc tính validationMessage có thể được sử dụng để ghi đè văn bản lỗi mặc định (https://github.com/ericmbarnard/Knockout-Validation/wiki/Validation-Bindings).Ngoài ra, bạn có thể thiết lập một chức năng xác nhận tùy chỉnh cho các quan sát của bạn có thể kích hoạt/hủy kích hoạt chú giải công cụ nếu tìm thấy lỗi. Nếu bạn có thể cho chúng tôi thấy một số mã mẫu (tốt nhất là trong một câu chuyện), chúng tôi có thể giúp bạn thực hiện các thay đổi cần thiết để làm cho nó hoạt động theo cách bạn muốn. –

+0

Cảm ơn bạn đã trả lời và xin lỗi vì sự chậm trễ ... một vài ngày nghỉ. Tôi đã thêm bản chỉnh sửa để giải thích đầy đủ hơn những gì tôi đang theo dõi. – RHarris

Trả lời

18

Có thể hiển thị biểu tượng và hiển thị thông báo lỗi khi di chuột.

Trong một dự án, chúng tôi đang thực hiện một việc tương tự. Chúng tôi hiển thị huy hiệu có số lỗi nhưng chúng tôi sử dụng decorateErang để làm nổi bật các trường và lỗiAsTitleOnModified để hiển thị lỗi khi di chuột qua đầu vào.

Để tạo thông báo lỗiTemplate bạn nên bọc mẫu của mình trong thẻ tập lệnh. Nó hoạt động như các mẫu của ko template binding.

Bên trong mẫu, bạn có thể truy cập vào được xác thực có thể quan sát được bằng cách tham chiếu đến 'trường'. Thông báo lỗi được lưu trữ trong 'lỗi' thuộc tính của bạn có thể quan sát được.

<script type="text/html" id="myCustomTemplate"> 
    <span data-bind="if: field.isModified() && !field.isValid(), 
        attr: { title: field.error }">X</span> 
</script> 

tôi đã tạo ra một fiddle để hiển thị này trong hành động: http://jsfiddle.net/nuDJ3/180/

+0

Cảm ơn rất nhiều! Đây chính xác là những gì tôi đã cố gắng hoàn thành! – RHarris

+0

Thực tế, bây giờ tôi chơi với điều này nhiều hơn một chút, tôi thấy rằng nó không hoạt động như tôi mong đợi. Đầu tiên, X (huy hiệu) không bao giờ biến mất. Thứ hai, hãy kiểm tra http://jsfiddle.net/nuDJ3/5/ này và lưu ý rằng việc xóa một trường không kích hoạt thông báo lỗi. Tui bỏ lỡ điều gì vậy? – RHarris

+0

Ồ tôi xin lỗi. Tôi đã bỏ lỡ thông báo nếu nó là hợp lệ hoặc không được sửa đổi. Knockout-validation chèn khoảng thời gian một lần và sau đó bạn phải sử dụng các ràng buộc bình thường. Tôi đã cập nhật câu trả lời và tạo ra một phiên bản mới của [fiddle] (http://jsfiddle.net/nuDJ3/6/). Bí quyết là chèn "if: field.isModified() &&! Field.isValid()" vào liên kết của nhịp. – delixfe

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