-
Notifications
You must be signed in to change notification settings - Fork 94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Store & propertyNames #31
Comments
Hi! Thanks for using the library! |
Thank you for your answer :). |
Приветствую, Константин. Есть ли какие-то продвижения по поводу vuex? Mutations не отрабатывают. Данные для геттера лежат в одном из модулей, с ним все ок, но в таком случае после любой выбранной ноды перестает работать expand/collapse в дереве в целом, классы для hover и selected. |
Изменил поведение библиотеки с Vuex. Еще докумнтацию не обновил, пока нет возможности это сделать. Но в примерах надеюсь все очень понятно сделано. Надеюсь поможет :) Пишите, если что-то не будет получаться или появятся какие-либо вопросы. |
Однако, если геттер возвращает у объекта поле, представляющее массив для дерева, то сталкиваюсь с тем, что у выбранной ноды изменяется state, но expand/collapse перестает работать, как и классы для hover и selected. Видимо без отдельного объекта в state для дерева не обойтись. В прошлой версии можно было обойтись только геттером, сейчас диспатч метод обязателен, но стейт (объект с полем для дерева, описанный выше) у нас меняется в другом мутаторе после запрос к api. Выкглядит удобным вариант подписываться через геттер и делать ререндер при обновлении объекта. Сейчас форсим это через локальный метод, который тоглит объект в v-if для дерева и после селектим ноду, которая была выбрана до перерисовки, костыль, но пока единственный способ реактивно ререндерить дерево. пс. в своем кейсе также используем propertyNames |
Сделал решение в лоб, т.е. без всякой магии. На любой чих - нужно диспатчить экшн хранилища и это уже на плечах разработчика. Vuex не разрешает определять нескольно геттеров одним именем (даже в модулях), поэтому возможно и есть смысл сделать как и Долго думал о решении, но как по мне, данный подход решает любой кейс:
Этот подход может быть использован и для других |
Делал не мало тестов, и единственное что нашел - так это потеря фокуса дерева. Этим займусь, как освобожусь чуток. Можно глянуть на Ваш пример (либо что-то близкое) ? Подумаю, что можно будет с этим сделать |
В модуле есть стейт: |
А можно глянуть |
contracts.mutations.updateTree = (state, value) => {
let tree = value.map(a => a.data);
clausePartHelper.handleClauseParts(tree);
state.contract.clause.clauseParts = tree;
//state.contract.clause.clauseParts = [...tree];
};
contracts.actions.updateTree = (context, value) => {
context.commit("updateTree", value);
}; clausePartHelper.handleClauseParts() применяется также для contract.clause.clauseParts везде, где есть мутация contract. handleClauseParts: function(clauseParts) {
clauseParts.forEach(value => {
if (value.clauseParts != null) {
this.handleClauseParts(value.clauseParts);
}
let val = Object.assign({}, value);
value.data = val;
});
} |
Любое изменение в строре - заставит обновить данные в дереве. Т.е. Прийдут с сервера, либо вызов api... В нашем случае вернет: getTreeData: state => {
if (state.contract == null) return [];
return state.contract.clause.clauseParts;
} Какая бы ни была сложная логика - что вернет этот геттер, то и увидем в дереве. Если что-то было выделенно, а дерево это не нарисовало - значит что-то вернулось не верное... contracts.mutations.updateTree = (state, tree) => {
state.contract.clause.clauseParts = tree;
}; Этого должно быть достаточно... на крайний случай this.$set |
tree в параметре это объект дерева (аналогичный $refs.tree.model, но меньше), а clauseParts это объект с бэка, в нем нет изначально statesб children, data. С помощью handleClauseParts я создаю data для clauseParts, чтоб в data нод дерева был clauseParts[i]. Кстати, states у нод в объекте tree не изменяется, может поэтому ui select и expand не отрабатывают? |
Изначально в |
Hellow !
I'm trying to use your nice component on a project, unfortunatly I just encountered several problems :(
So, the component beeing unable to update using computed props on :data, I noticed u added the new store option which I'm trying to use.
My tree options
treeOptions: { store: { store: this.$store, getter: "treeStore", mutations: ["updateTree"] }, checkbox: true, propertyNames: { text: "myname", children: "mychildren" }, filter: { plainList: true } }
My Store:
import forest from "./forest" const store = new Vuex.Store({ modules: { forest }, });
My Store module "forest"
export default { namespaced: true, treeStore: [], getters, mutations: { updateTree(state, newData) { state.treeStore = newData; } }, actions };
Could you give me a hand in order to solve those problems please?
Thank you kindly :p.
The text was updated successfully, but these errors were encountered: