Отказ от ответственности: Это моя первая попытка создания MVVM-приложения. Я также не работал с vue.js раньше, так что вполне возможно, что моя проблема является результатом более фундаментальной проблемы ,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
}
]
}
]
}
]
}
Мои цели
Выбор флажки:
- Пользователь нажимает на флажке, установлен флажок (выбрано = истина)
- метод вызывается, чтобы проверить, есть ли другие флажки должны быть отключено (disabled = true). (Если этот метод действительно отключен либо, он также называет себя снова, потому что другие элементы могут быть в свою очередь, зависит от пункта инвалидов)
- Другой метод обновляет некоторые другие вещи, как иконки и т.д.
Очистка Флажки
Пользователь может нажать кнопку «Очистить», которая отменяет все флажки в списке (selected = false). Это действие должно также вызывать методы, которые при необходимости выключает флажков и обновляет иконки и т.д.
Мой текущий метод(который, кажется, не совсем верно)
- Выбранный атрибут Data- модель привязана к проверенному состоянию элемента флажка с помощью
v-model
. - Отключенный атрибут (из модели) связан с классом элемента и отключенным атрибутом. Это состояние задается вышеупомянутым методом.
- Чтобы инициализировать методы, которые отключают флажки и меняют некоторые значки, я использую директиву
v-on="change: checkboxChange(this)"
. Я думаю, что мне нужно сделать эту часть по-разному метода - clearList называется через
v-on="click: clearList(this)"
Проблемы с моей текущей установкой является то, что событие изменения не стреляя, когда флажки очищаются программно (т.е. а не взаимодействием с пользователем).
То, что я хотел бы вместо
мне наиболее логичным, что нужно сделать было бы использовать this.$watch
и отслеживать изменения в модели, а прослушивание событий DOM.
После того, как произойдут изменения, мне нужно будет определить, какой именно предмет был изменен, и действовать по этому поводу. Я попытался создать функцию $watch
, которая наблюдает массив blocks
. Это, похоже, отлично подходит для изменений, но возвращает полный объект, в отличие от индивидуального атрибута, который изменился. Также этот объект не имеет некоторых удобных вспомогательных атрибутов, таких как $parent
.
Я могу придумать некоторые хакерские способы заставить приложение работать (например, вручную изменять события изменения в моем методе clearList и т. Д.), Но мой пример использования кажется довольно стандартным, поэтому я ожидаю, что, вероятно, будет гораздо более элегантный способ справитесь с этим.
.selected и .disabled - это свойства анонимных переменных объектов, которые относятся к массиву переменных. Ваш пример работает, потому что это всего лишь один объект, а не массив. – Hendrik
Я сделал что-то вроде block.checkbox.active, но это не сработает, пока я не добавлю их в "", как вы упомянули выше. Благодарю. Он работает сейчас. –