我有一個較大的QML項目,我試圖重構,以便某些相關組件位於其自己的文件中。在我的簡單示例中,的一部分是什麼ThingManager.qml以前只是簡單包含在main.qml文件中。前重構,ID的範圍,一個,b,和Ç是可見的,以page.qml,因爲它們在主文件中定義。當我試圖抽象這些成ThingManager內容,以減少在我main.qml雜波,page.qml不再能夠引用那些與familar作用域錯誤:重構QML並將組件保持在範圍內
page.qml:9: ReferenceError: a is not defined
鑑於我加載類似於page.qml的頁面,並希望在這些組件中執行存儲在另一個文件中的方法,建議如何重構類似此示例的方法,以便page.qml可以訪問這些組件中的方法,而不必在main .qml?或者那根本就不可能做到?
main.qml:
import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQml 2.2
ApplicationWindow {
id: window
ThingManager { }
Loader {
id: page_loader
}
Component.onCompleted: {
page_loader.setSource("page.qml")
}
}
ThingManager.qml:
import QtQuick 2.7
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3
Item {
Column {
Button {
id: a
text: "A"
}
Button {
id: b
text: "B"
}
Button {
id: c
text: "C"
}
}
}
page.qml:
import QtQuick 2.7
import QtQuick.Controls 2.1
Page {
id: page
Component.onCompleted: {
console.log("Execute A's method")
a.toggle()
}
}
您應該添加一個id爲'ThingManager'和定義別名'了'作爲'ThingManager.qml'的屬性。 – m7913d
好的,謝謝!那是我需要的組合。我試圖應用一個屬性別名,但放置在ThingManager.qml id而不是導致其他錯誤的實例。不幸的是,我沒有特權將您的評論標記爲答案,否則我會這麼做。至少,我可以將更新後的代碼作爲答案發布給您的評論。 – ohporter
我將其添加爲答案,包括解決方案的草圖。 – m7913d