Вот немного изменённого из твоего, тоже получилось. Он использует выбранное свойство для каждого элемента в массиве, которое можно наблюдать для двухсторонней связи. Если вам нужно свойство, представляющее собой просто список выбранных элементов, вы всегда можете создать зависимую наблюдаемую область или просто метод для фильтрации.
http://jsfiddle.net/QCmJt/32/
Создана пользовательская привязка:
ko.bindingHandlers.selectableItem = {
init: function(element, valueAccessor, allBindingsAccessor) {
var selectable = $(element).parent();
selectable.bind('selectableselected', function(event, ui) {
if(ui.selected === element) {
var value = valueAccessor();
value(true);
}
});
selectable.bind('selectableunselected', function(event, ui) {
if(ui.unselected === element) {
var value = valueAccessor();
value(false);
}
});
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var el = $(element);
if(valueAccessor()()) {
el.addClass('ui-selected');
} else {
el.removeClass('ui-selected');
}
}
};
Он не защищен для более чем простых двусторонних привязок, но должен быть достаточно легким для наращивания.