Доступ Flickable от родительского элемента

Я пытаюсь вызвать функцию, которая определена внутри элемента Flickable, но, кажется, невозможно получить к нему доступ по id. Следующий код производит ReferenceError: flickable is not defined когда tab.getValues() называется:

import QtQuick 2.4

Tab {
    id: tab
    function getValues() {
        flickable.getValues()
    }
    Flickable {
        id: flickable
        clip: true
        flickableDirection: Flickable.VerticalFlick
        contentHeight: column.height
        topMargin: 2 * pxPermm
        function getValues() {
            console.log("flickable.getValues() called")
        }
        Column {
            id: column
            // some content
        }
    }
}

Как еще я должен получить доступ к элементу Flickable? Функция getValues ​​() должна быть размещена внутри Flickable, потому что она должна получить доступ к элементам, размещенным внутри столбца.

1 ответ

Решение

Это проблема с Tabобъект. Это Loader чье свойство по умолчанию sourceComponent, Когда вы кладете Flickable элемент внутри него, он преобразуется * в компонент и назначается. Когда ваш Tab объект просматривается, он создает ваш Flickable объект, к которому можно получить доступ через item имущество:

function getValues() {
  if(tab.active)
    tab.item.getValues();
  else
    console.log("Tab is not viewed so item does not exists.");
}

Тот Flickable объект унаследовал, но другой контекст, чем ваш Tab объект. Это означает, что вы можете получить доступ tab от flickable, но нет flickable от tab,

Другие вопросы по тегам