2014-10-16 65 views
0

我想繞過某些qml組件所需的對象。問題是,如果沒有說它未定義,我不能引用這個對象。綁定到id的未定義引用,作用域規則

Item { 
    id: root 

    property alias db: database // this works for some reason 

    Database { 
     id: database 
     Component.onCompleted: { 
      connect("sqlite3", "dbname=database.db") 
      deleteTables(); 
      createTables(); 
     } 
    } 

    ContactImageProvider { 
     id: contactImageProvider 
     database: db // this works for some reason 
     database: root.database // This would be undefined 
     database: database // no loop detected but still null 
    } 
} 

所以我非常非常困惑如何,我應該能夠傳遞的依賴下降,雖然對象,而有史以來最混亂的命名方案。這可能是任何事情。也許我需要一些控制顏色,但也想將它傳遞給另一個控件。整個範圍名稱解析文檔都很不清楚。我無法做出我應該能夠做到的正面或反面。

Item { 
    id: root 

    property Database database: Database { 
     id: database // if no id then this doesnt work 
     Component.onCompleted: { 
      connect("sqlite3", "dbname=database.db") 
      deleteTables(); 
      createTables(); 
     } 
    } 
    property alias db: database 

    ContactImageProvider { 
     id: contactImageProvider 
     database: db // this doesn't work. WHY? idk 
     database: database // works if id is on 
    } 
} 

另外別名似乎不工作,如果我把它作爲一個屬性。

+0

'database:db //這是行不通的。爲什麼? idk' - db不是一個id,它是一個屬性,不是「全局」可用的,你必須去'root.db' – dtech 2014-10-16 19:35:26

回答

0

對我之後的任何可憐的靈魂來說,這似乎與屬性名稱和id名稱的解析方式之間的差異有關。我最終得到的是這個。

Item { 
    id: root 

    property Database database: Database { 
     // notice no id 
     Component.onCompleted: { 
      connect("sqlite3", "dbname=database.db") 
      deleteTables(); 
      createTables(); 
     } 
    } 

    ContactImageProvider { 
     id: contactImageProvider 
     database: root.database // I can explicitly get a property 
    } 
}