2013-05-10 28 views
10

Tôi đang đấu tranh để thiết lập một giá trị trên đầu vào của type="date" trong google chrome: http://jsfiddle.net/ruslans/gNv7H/Knockout.js loại đầu vào ngày dữ liệu ràng buộc trong Google Chrome

<input data-bind="value: dateString" type="date"></input> 

var viewModel = { 
    someDate: new Date(parseInt("/Date(1367708400000)/".substr(6))) 
}; 
ko.applyBindings(viewModel); 

ngày tôi sẽ đến từ dữ liệu JSON nhưng trước tiên tôi cần để tìm ra định dạng nào cần phải có trong bộ chọn ngày của Chrome để nhận ra ràng buộc. Tôi có phải làm điều đó với bộ chọn jQuery và đặt .val() trên trường không? Dems daft ...

Chỉnh sửa: theo this article, định dạng ngày để đặt giá trị trên đầu vào ngày của Google phải luôn là "yyyy-mm-dd". Đó là một điều đáng tiếc, bởi vì chúng tôi đang sử dụng bộ chọn ngày jQuery cho tất cả các trình duyệt không tồn tại bộ chọn ngày gốc.

+0

Lưu ý rằng theo [dự thảo tiêu chuẩn W3] (http://www.w3.org/TR/html-markup/input.date.html), điều này sẽ không phải là chrome cụ thể nhưng mọi trình duyệt sẽ/nên triển khai như thế này: "yyyy-mm-dd" định dạng ngày. Bởi lý do tại sao bạn có thể cấu hình bộ chọn ngày jQuery để sử dụng định dạng này vì vậy tôi không thấy vấn đề của bạn ... – nemesv

+0

định dạng ngày được hiển thị sẽ là người thuê cụ thể. Ví dụ. mm/dd/yyyy cho Hoa Kỳ, mm.dd.yyyy cho Nga, dd/mm/yyyy cho Vương quốc Anh, v.v. Tuy nhiên, tại nguồn, nó sẽ luôn là định dạng ngày JSON. – Tsar

+0

Vì vậy, bạn có thể có ngày của bạn ở bất kỳ định dạng nào trong mô hình/nguồn. Sau đó, bạn cần phải chuyển đổi nó thành "yyyy-mm-dd" khi đặt giá trị của các đầu vào của bạn. Và bạn có thể thiết lập jQuery để sử dụng định dạng "yyyy-mm-dd" này để lưu trữ dữ liệu. Và bạn cần phải thiết lập jQuery và cũng là datepicker gốc chrome để hiển thị nó trong bất kỳ định dạng đích nào. Vì vậy, bạn sẽ có cuối cùng ba định dạng: nguồn, định dạng cho đầu vào, định dạng cho màn hình. Tôi không thấy một vấn đề ở đây là làm thế nào những điều này đang làm việc khi bạn phải đối phó với ngày tháng. – nemesv

Trả lời

11

Bạn chỉ cần định dạng một cách chính xác value của bạn như được mô tả trong W3C working draft:

Một toàn ngày hợp lệ theo quy định tại RFC 3339, với trình độ chuyên môn bổ sung các thành phần năm là bốn hoặc nhiều chữ số đại diện một số lớn hơn 0.

Ví dụ: 1996-12-19

Vì vậy, những điều sau đây sẽ hoạt động:

var viewModel = {  
    dateString: ko.observable('2002-02-02') 
}; 

Demo JSFiddle.

+0

Cảm ơn câu trả lời của bạn, bạn có thể cho tôi bất kỳ ý tưởng về cách html5 datepicker (kiểu đầu vào "ngày") với knockout.js mà không sử dụng các biến được tính toán không? như nó được thực hiện ở đây: http://screencast.com/t/pMtuSV6mxUf – johannesMatevosyan

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