2012-05-10 41 views
19

câu hỏi tương tự như: Select element's initial valueKnockoutJS Chọn Tùy chọn và chọn Value

Tôi đang gặp một vấn đề thiết lập các giá trị ban đầu của phần tử được lựa chọn. Về cơ bản tôi có một danh sách dữ liệu về hạt giống đến từ máy chủ để điền danh sách thả xuống và tôi muốn giá trị được chọn để biểu thị những gì nên được chọn từ thực thể.

Vì giá trị được chọn của mô hình dữ liệu không bằng tham chiếu đối tượng trong dữ liệu hạt giống, không có gì được chọn.

Ngay bây giờ, tôi đang lặp qua từng thực thể, tìm đúng giá trị đã chọn, thiết lập bằng với số liệu tương đương của hạt giống, sau đó Knockout biết cách kết nối nó.

Có giải pháp thanh lịch hơn cho điều này không? Tôi đã bỏ qua ví dụ đơn giản với nhiều chi tiết hơn ... http://jsfiddle.net/hbrYM/14/

Trả lời

34

Khi bạn đoán chính xác tham chiếuValue đã chọn không khớp nên KO không chọn mục đó. Cách để có được điều này để làm việc là không lưu các đối tượng phức tạp trong giá trị được lựa chọn và thay vào đó chọn ID, như là một loại nguyên thủy bình đẳng có thể thành công và giá trị chính xác được chọn.

http://jsfiddle.net/VLTFB/3/

Bạn sẽ cần phải sử dụng tùy chọn optionsValue vào các tùy chọn ràng buộc (nếu có ý nghĩa :)

<select data-bind="options: seedData, 
        optionsText: 'firstName', 
        optionsValue: 'ID', 
        value: data.selectedValue"> 

EDIT

Như đã thảo luận bạn có thể chọn lại đúng mục có tính toán (chưa được kiểm tra).

vm.currentlySelected = ko.computed(function() { 
    for (var i = 0; i < this.seedData().length; i += 1) { 
     var data = this.seedData()[i]; 
     if (data.ID === this.selectedValue()) { 
      return data; 
     } 
    } 
    return null; 
}, vm); 

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn đã trả lời, điều đó có ý nghĩa. Tôi hiện đang gửi lại đối tượng (không chỉ ID) mà sau đó được deserialized và kiên trì. Tôi đã thực sự hy vọng có một cách để "hướng dẫn" KO làm thế nào để dây này lên bởi vì tôi có rất nhiều lựa chọn khác nhau trong giao diện người dùng cụ thể này ... – aswallows

+1

Bạn vẫn có thể gửi lại đối tượng khá dễ dàng chỉ khi chọn dữ liệu từ máy chủ đi vào, chỉ cần gửi id. Khi bạn cần phải gửi một lựa chọn mới trở lại chỉ đơn giản là viết một tính toán mà retreives các đối tượng hiện đang được chọn (xem chỉnh sửa). Nó thực sự leaner để làm điều đó theo cách này, bạn đã có dữ liệu hạt giống vậy tại sao bận tâm gửi tất cả những thông tin thêm một lần nữa. – madcapnmckay

+0

Cảm ơn bạn đã phản hồi! Tôi sẽ xem xét cách tiếp cận đó. – aswallows

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