2012-12-01 26 views
25

Trong html, khi chúng ta click vào văn bản hoặc di chuột qua văn bản của một nút radio hoặc hộp kiểm, chúng tôi có thể chọn nó với html như hình dưới đây:nhãn Checkbox và Radio trong loại trực tiếp

<label> 
<input type="checkbox" />option 1 
</label> 

HOẶC

<input id="checkboxid" type="checkbox" /> 
<label for="checkboxid">option 1</label> 

tôi đang cố gắng để có được những hành vi tương tự với loại trực tiếp, nhưng không thể tìm thấy sự giúp đỡ nhiều vào giống nhau:

<label data-bind="text: $data.optiontext"> 
    <input type="checkbox" data-bind="value: $data.optionvalue, checked: $parent.selectedOptions" /> 
</label> 

The View (hoặc html) là dưới đây (Lưu ý mã dưới đây không chứa html ở trên, vì vậy khi bạn thử nó, bạn sẽ cần phải thực hiện những thay đổi trên và kiểm tra xem nó):

<div data-bind="foreach: options"> 
    <input type="checkbox" data-bind="value: $data.optionvalue, checked: $parent.selectedOptions" /> 
    <label data-bind="text: $data.optiontext"></label> 
</div> 

<hr /> 

<div data-bind="text: selectedOptionsList"></div>​ 

Dưới đây là quan điểm mô hình:

var viewModel = { 
    options: [ 
       { optiontext: 'Simple', optionvalue: "1" }, 
       { optiontext: 'Advanced', optionvalue: "2" } 
      ], 
    selectedOptions: ko.observableArray(["2"]) 
}; 

viewModel.selectedOptionsList = ko.computed(function() { 
    return this.selectedOptions().join(","); 
}, viewModel); 

ko.applyBindings(viewModel); 

Dưới đây là liên kết jsFiddle: http://jsfiddle.net/rupesh_kokal/AFzbY/

Trả lời

33

Bạn có thể đạt được các phiên bản 1. với việc sử dụng thêm span cho các văn bản:

<label> 
    <input type="checkbox" data-bind="value: $data.optionvalue, 
      checked: $parent.selectedOptions" /> 
    <span data-bind="text: $data.optiontext"/> 
</label> 

Demo fiddle.

Hoặc 2. phiên bản với việc sử dụng attr binding để thiết lập idfor thuộc tính:

<input type="checkbox" data-bind="value: $data.optionvalue, 
     checked: $parent.selectedOptions, attr: { id: optiontext}" />  
<label data-bind="text: $data.optiontext, attr: {for: optiontext}" /> 

Demo fiddle

+0

Cảm ơn nemesv. Tùy chọn đầu tiên phù hợp nhất với nhiệm vụ của tôi. Phiên bản thứ hai sẽ không hoạt động trong trường hợp của tôi, vì tôi có các điều khiển hộp kiểm khác nhau, được tạo động và sẽ yêu cầu phải có một số cách năng động để gán một id duy nhất cho cùng. Có cách nào chúng ta có thể đạt được điều này với loại trực tiếp như tạo ra một id duy nhất mà loại trực tiếp chăm sóc của chỉ định? – Rups

+1

Không có gì được xây dựng vào loại trực tiếp mà sẽ chăm sóc tạo ra và gán id duy nhất. Vì vậy, bạn cần phải thực hiện điều này cho mình: Một số câu hỏi SO về tạo id http://stackoverflow.com/questions/3231459/create-unique-id-with-javascript, http://stackoverflow.com/questions/105034/how- to-create-a-guid-uuid-in-javascript – nemesv

+0

Cảm ơn nemesv, sẽ xem xét nó. – Rups

3

Yo thậm chí có thể nhận được các ràng buộc để thả span thêm -kết thúc, bằng cách sử dụng cú pháp ràng buộc nhận xét Knockouts:

<label> 
<input type="checkbox" data-bind="value: $data.optionvalue, 
     checked: $parent.selectedOptions" /> 
<!-- ko text: $data.optiontext --><!-- /ko --></label> 

Điều này sẽ ngăn hộp kiểm và khoảng cách chia nhỏ trên hai dòng, nếu được sử dụng trong không gian hẹp.

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