2015-04-29 130 views
1

我想調用一個Flickable元素內定義的函數,但它似乎不可能通過id訪問它。下面的代碼產生ReferenceError: flickable is not definedtab.getValues()叫做:訪問從父元素Flickable

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中,因爲它需要訪問放置在列內的元素。

回答

2

這是Tab對象的問題。這是一個Loader,其默認屬性是sourceComponent。當你在其中放入一個Flickable元素時,它是converted*到組件並分配。當您Tab對象來看,它創建你的Flickable對象,它可以通過item屬性來訪問:比你Tab對象

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

Flickable對象繼承,但不同的上下文。這意味着您可以從flickable訪問tab,但不能從tab訪問flickable