KnockoutJS «проверенная» привязка не работает со списками observableArray и radio button - PullRequest
1 голос
/ 22 февраля 2012

У меня есть observableArray с именем SelectedAttributeValueIds, который мне нужно привязать к списку переключателей, используя привязку «флажок».Например,

<input type="radio" data-bind="checked: SelectedAttributeValueIds" />

Однако KnockoutJS заменяет observableArray единственным значением, которое просто можно наблюдать.поэтому вместо SelectedAttributeValueIds со значением [123] это будет «123»

Я сделал это в качестве обходного пути, но мне было интересно, есть ли более простой способ:

<input type="radio" data-bind="event: { change: function() { $parent.SelectedAttributeValueIds([$data.ID()]); } }" />

1 Ответ

2 голосов
/ 22 февраля 2012

Для радиокнопок KO предполагает, что будет записано только одно «значение». Для флажков он будет добавлять / удалять значения из массива.

Звучит так, как будто вы хотите всегда записывать одно значение, но иметь его в массиве как единственный элемент.

Один из вариантов - создать ko.computed для представления элемента в массиве. Другой вариант - использовать записываемый ko.computed для привязки к вводу и предоставления ему значения между форматами, которые вы хотите. Что-то вроде:

this.SelectedAttributeValueIds = ko.observableArray();
this.SelectedAttributeValueId = ko.computed({
   read: function() {
       var values = this.SelectedAttributeValueIds();
       return values.length ? values[0] : [];
   },
   write: function(newValue) {
       this.SelectedAttributeValueIds([newValue]);
   },
   owner: this
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...