У меня есть параметры серии, которые пользователь может выбрать, и я могу отслеживать через наблюдаемый массив. Сам массив загружается из Модели, которую я приношу в нокаут с помощью расширения отображения нокаута (ko.mapping.fromJS). Все работает нормально.Отключение/удаление Выбор параметров, созданных с помощью привязки опций нокаута
Объясняя это получит, но многословным и может вызвать еще большую путаницу, чтобы увидеть диаграмму ниже:
В основном:
- У меня есть веб-форму входа (его конфигуратор сортирует)
- Список предметов довольно большой, я бы сказал, что 10 возможных вариантов можно добавить в конфигурацию
- Когда пользователь добавляет элемент, я нажимаю по умолчанию «Item A» в массив, привязанный к параметрам, и он отображается просто отлично.
- То, что я пытаюсь сделать, это удалить элемент А из его выбора после его добавления один раз. Если он удален, он должен быть в состоянии быть добавлен
- Как все это происходит через KO observables - один для отслеживания доступных параметров, а другой для отслеживания опций «Выбранные». Как я уже сказал, все работает нормально, и я пытаюсь настроить его на основе запроса.
Первоначально - я думал - я просто позволю пользователям добавлять дубликаты и обрабатывать обманы через проверку - если это единственный вариант, я, скорее всего, вернусь к нему.
Я обнаружил «Post-processing the generated options», но представленный пример объявляет массив в строке, и я не уверен, как я могу привязать этот тип вызова к наблюдаемому массиву I auto map, используя расширение отображения.
В двух словах мне интересно, есть ли у кого-нибудь идея о том, как отключить предыдущий выбор (помните, что ВСЕ выборки находятся в одном наблюдаемом массиве, а ВЫБРАННЫЕ - в другом) - или это невозможно учитывая источник моих данных. Таким образом, в ярко-розовом выделенном аннотации на изображении - мне идеально понравилось бы только «Item B и Item C», но если ITEM A может быть отключен, это тоже сработает.
Я не знаю, была ли жизнеспособна jQuery манипуляция с DOM? Это должно произойти после привязки данных и может стать беспорядочным.
В зависимости от ответа здесь - мой следующий экран имеет TWO каскадные выпадающие списки, и я думал о применении этого же уникального подхода к выбору - но к комбинации.
Некоторые код (упрощенно, чтобы защитить виновных)
public class ItemsModel
{
public List<ItemTypes> ItemTypes{ get; set; }
public List<SelectedItemTypes> SelectedItemTypes{ get; set; }
}
public class ItemTypes
{
public int Id { get; set; }
public string Description { get; set; }
}
public class SelectedItemTypes
{
public int Id { get; set; }
public decimal Amount { get; set; }
}
** Javascript/HTML (опять надрезается для соответствующих частей) **
self.worksheetitems = ko.mapping.fromJS(@Html.Raw(Model.ToJson()))
/* Adds an Item */
self.addItem= function() {
self.worksheetitems
.SelectedItemTypes.push({ 'Id': ko.observable(),
'Amount': ko.observable(0)});
Html Таблица, которая содержит этот материал (обратите внимание на foreach через выбранные элементы и привязку к массиву всех элементов):
<!-- Items -->
<tbody data-bind=
"visible: worksheetitems.SelectedItemTypes().length > 0,
foreach: worksheetitems.SelectedItemTypes">
<tr>
<td>
<select data-bind=
"options: $root.worksheetitems.ItemTypes(),
optionsText: 'Description',
optionsValue: 'Id', value: Id"></select>
</td>
<tr/>
<!-- Snipped -->
<button data-bind="click: $root.addItem">Add</button>
<!-- Add Another Item -->
Ну объяснил вопрос, но это помогло бы, если бы вы добавить код на вопрос поможет нам сделать минимальный воспроизводимым сценарий. То, что вы хотите, безусловно, возможно (без jQuery), но детали будут зависеть от вашего контекста. – Jeroen
уверен, что я добавлю код – kd7
Я думаю, что вы можете использовать опцию для указания обратных вызовов [при сопоставлении создает элементы] (http://knockoutjs.com/documentation/plugins-mapping.html#customizing_object_construction_using_create), чтобы настроить генерируемых наблюдаемым. Вы можете попытаться объединить это с обработкой [setOptionsDisable] (http://knockoutjs.com/documentation/options-binding.html#note_2_postprocessing_the_generated_options), о которой вы упомянули. Это поможет? – Jeroen