2016-03-21 4 views
0

У меня есть список атрибутов с различным типом данных, если тип данных является флажком, тогда я хотел бы привязать значение в строке к флажку. Мне удалось привязать значение из базы данных к пользовательскому интерфейсу. Но если есть какая-либо модификация значения, я не смог бы вернуть его из списка. Может ли кто-нибудь посоветовать это?KnockoutJS Dynamic CheckBox Binding

Спасибо.

код UI

<tbody data-bind="foreach: data().Attributes"> 
     <tr> 
      <th data-bind="text: AttributeName"></th> 
      <td> 
       <span data-bind="if: AttributeDataType === 'CheckBox'"> 
        <input class="input-sm" type="checkbox" data-bind="value: AttributeValue, checked: $parent.ConvertToBoolean(AttributeValue), visible: $parent.editMode() " /> 
       </span> 
       <span data-bind="if: AttributeDataType === 'Text'"> 
        <input class="input-sm" type="text" data-bind="value: AttributeValue, visible: $parent.editMode() " style="min-width: 300px;" /> 
       </span> 
       <span data-bind="if: AttributeDataType === 'DropDown'"> 
        <select class="selectpicker" data-bind="options: $parent.availableTestProgramType, value: AttributeValue, visible: $parent.editMode() "></select> 
       </span> 
      </td> 
     </tr> 
     </tbody> 

Script

public data = ko.observable<any>([]); 
public ConvertToBoolean = (x: string) => { 
    return x == "true" ? true : false; } 
+1

ли 'AttributeValue' объявлен как наблюдаемый? – Neps

+0

Привет, Neps, данные объявлены как наблюдаемые. Нужно ли объявлять AttributeValue как наблюдаемое отдельно? Благодарю. –

+0

Да, если вы хотите «захватить его из списка». В противном случае это просто односторонняя привязка к пользовательскому интерфейсу – Neps

ответ

0

мне удается решена моя проблема путем добавления события нажатия на флажок и изменить основное значение данных.

UI код

<input class="input-sm" type="checkbox" data-bind="checked: $parent.ConvertToBoolean(AttributeValue), visible: $parent.editMode(), click: $parent.toggleAssociation " /> 

Script

public toggleAssociation = function (item) { 
    if (item.AttributeValue == "" || item.AttributeValue == "false") { 
     item.AttributeValue = "true"; 
    } else { 
     item.AttributeValue = "false"; 
    } 
    return true; 

}