Отказ от ответственности:. Это моя первая попытка создания MVVM-приложения. Я также не работал с vue.js раньше, поэтому вполне может быть, что моя проблема является результатом более фундаментальной проблемы.
На мой взгляд, у меня есть два типа блоков с флажками:
- Тип 1: блок/флажки
- Тип 2: блок/заголовки/флажки
Основной объект структурирован следующим образом:
{
"someTopLevelSetting": "someValue",
"blocks": [
{
"name": "someBlockName",
"categryLevel": "false",
"variables": [
{
"name": "someVarName",
"value": "someVarValue",
"selected": false,
"disabled": false
}
]
},
{
"name": "someOtherBlockName",
"categryLevel": "true",
"variables": [
{
"name": "someVarName",
"value": "someVarValue",
"categories": [
{
"name": "SomeCatName",
"value": "someCatValue",
"selected": false,
"disabled": false
}
]
}
]
}
]
}
Мои цели
Выбор флажков:
- Пользователь нажимает на флажок, установлен флажок (selected = true)
- Устанавливается метод, чтобы проверить, нужно ли отключать любые другие флажки (disabled = true). (Если этот метод действительно отключил что-либо, он также снова вызывает себя, потому что другие элементы могут быть в свою очередь зависимы от отключенного элемента)
- Другой метод обновляет некоторые другие функции, такие как значки и т.д.
Удаление флажков
Пользователь может нажать кнопку "Очистить", которая отменяет все флажки в списке (selected = false). Это действие также должно инициировать методы, которые необязательно отключают значки и значки обновлений и т.д.
Мой текущий метод (что кажется не совсем правильным)
- Выбранный атрибут модели данных привязан к проверенному
состояние элемента флажка с помощью директивы
v-model
. - Отключенный атрибут (из модели) привязан к классу элемента и отключенному атрибуту. Это состояние задается вышеупомянутым методом.
- Чтобы инициализировать методы, которые отключают флажки и меняют некоторые значки, я использую директиву
v-on="change: checkboxChange(this)"
. Я думаю, мне нужно сделать эту часть по-другому. - Метод clearList вызывается через
v-on="click: clearList(this)"
Проблемы с моей текущей настройкой состоят в том, что событие изменения не срабатывает, когда флажки очищаются программно (т.е. не взаимодействием с пользователем).
Вместо этого я хотел бы
Для меня наиболее логичным было бы использовать this.$watch
и отслеживать изменения в модели, вместо того, чтобы слушать события DOM.
Как только произойдет изменение, мне нужно будет определить, какой именно элемент изменился, и действовать по этому поводу. Я попытался создать функцию $watch
, которая наблюдает массив blocks
. Это, похоже, отлично подходит для изменений, но возвращает полный объект, в отличие от индивидуального атрибута, который изменился. Также этот объект не имеет некоторых удобных вспомогательных атрибутов, например $parent
.
Я могу думать о некоторых хакерских способах заставить приложение работать (например, вручную изменять события изменения в моем методе clearList и т.д.), но мой пример использования кажется довольно стандартным, поэтому я ожидаю, что, вероятно, будет гораздо более элегантный способ обработки это.