Я пишу приложение Nativescript-Vue.
У меня есть компонент с двумя дочерними компонентами. Поэтому, когда я нажимаю кнопку, расположенную во втором, мне нужно отключить прокрутку ListView, размещенного в первом.
Поэтому я взял свой элемент ListView через "ref=" и поместил его в хранилище (Vuex)
<ListView ref = "listViewEl" ></ListView>
...
mounted() {
store.commit('putElInStore', this.$refs.listViewEl)
}
...
putElInStore(state, element) {
state.listViewEl = element
}
Мне нужно отключить прокрутку ListView, когда я нажимаю кнопку во втором дочернем компоненте. Поэтому я делаю это с помощью store.commit:
<Button @tap = "disableListViewScrolling"></Button>
...
disableListViewScrolling() {
store.commit('disableScrolling')
}
...
disableScrolling(state) {
state.listViewEl.nativeView.android.setClickable(false)
}
Так что никаких ошибок в этом случае я не получаю, но вообще никакой реакции. Это просто не работает.
Я также пытался использовать setEnabled(false) вместо. Работает, но некорректно.
Что мне не хватает? Где моя ошибка?
Заранее спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Не должно быть необходимости хранить элемент в Vuex. Без полного кода я дам вам общую схему того, как это можно сделать.
<Parent>
<childOne ref = "listViewChild"></childOne>
<childTwo @disableButtonTapped = "$refs.listViewChild.disableClick()"></childTwo>
</Parent>
<childOne>
<ListView ref = "list"></ListView>
</childOne>
<script>
export defaults {
methods: {
disableClick () {
this.$refs.list.nativeView.android.setClickable(false)
}
}
}
</script>
<childTwo>
<Button @tap = "$emit('disableButtonTapped')"></Button>
</childTwo>
Очевидно, что этот код не точен.
В связи с этим вы также можете использовать
:isUserInteractionDisabled = "someProp", если вам нужно полностью отключить взаимодействие. затем вы управляете состоянием взаимодействия из реквизита, а не переключаете его через ссылку.