Tôi đã cố tạo một trình quản lý ràng buộc tùy chỉnh mà tôi có thể sử dụng để cung cấp cho hành vi watermark đối với các trường nhập văn bản.watermark đầu vào văn bản bằng cách sử dụng tùy chỉnh bindingHandler
By watermark
tôi có nghĩa là: để thêm giá trị mặc định cho các trường văn bản được loại bỏ trên tập trung, và thay thế vào mờ nếu trường văn bản vẫn còn trống
tôi đã quản lý để có được điều này để làm việc như thể hiện trong jsfiddle này : http://jsfiddle.net/rpallas/nvxuw/
tôi có 3 câu hỏi về giải pháp này:
- có cách nào để thay đổi nó vì vậy mà tôi chỉ phải kê khai giá trị watermark một lần? Hiện tại tôi phải đặt nó vào vị trí mà tôi khai báo ràng buộc và tôi cũng phải khởi tạo quan sát có cùng giá trị trong viewModel - vì nó sẽ không có giá trị ban đầu.
- Có cách nào tốt hơn để đến được cơ sở có thể quan sát thấy rằng giá trị của phần tử được ràng buộc hay không. Tôi hiện đang lấy nó bằng cách sử dụng allBindingsAccessor, nhưng điều này cảm thấy sai với tôi. Ban đầu tôi đã chỉ thiết lập giá trị bằng cách sử dụng jquery
$(element).val('')
nhưng điều này cũng cảm thấy sai. Điều gì là tốt nhất, hoặc là có một cách tốt hơn? - Có ai có hoặc biết giải pháp hiện tại cho vấn đề này không? Tôi có phát minh lại bánh xe không?
vâng, đó gần như chính xác những gì tôi đã có trước khi tôi thay đổi nó để sử dụng allBindingsAccessor. Tôi đã thiếu 'setTimeout' khi cố thiết lập giá trị ban đầu. Bạn có thể giải thích ngắn gọn tại sao điều đó là bắt buộc? Ngoài ra, bạn có biết nếu có một cách tốt hơn? hoặc bạn có nghĩ rằng đây là một cách tốt (đủ) (về toàn bộ giải pháp)? Ví dụ tôi nhận thấy rằng có một ràng buộc hasfocus (được xây dựng trong). Đó có thể là một cách tiếp cận tốt hơn? – Robbie
Tôi nghĩ rằng cách tiếp cận này là tốt nếu bạn muốn hỗ trợ các trình duyệt cũ hơn. Đối với những cái mới chỉ sử dụng thuộc tính giữ chỗ. SetTimeout là cần thiết bởi vì nội bộ KO sử dụng một setTimeout trước khi thiết lập giá trị của đầu vào. Điều này có nghĩa là mã của bạn đã chạy trước khi mã KO thiết lập giá trị do đó bạn cần setTimeout để một lần nữa đảm bảo mã của bạn đến cuối cùng trong quá trình thực hiện. – madcapnmckay
Cảm ơn rất nhiều vì đã giải thích và giúp đỡ. – Robbie