0

我正在从另一个 QML 页面初始化一个 QML 页面的属性。

我的第一个 QML 页面的代码 -page1.qml 如下:

Page{
    id: page1

    //Some code

    Button{
        text: "Click Me"
        onClicked: {
             var page = nextPage.createObject();
             page.cost = netCost;  //netCost is an int property of page1 and is calculated in the code
             resvNav.push(page);  //resNav is the id of the NavigationPane
        }
    }// Button ends

    attachedObjects: [
         ComponentDefinition {
              id: nextPage
              source: "page2.qml"
         }
    ]
}// page ends   

我的第二页的代码 -page2.qml如下:

Page{
   id: page2

   property int cost
   property alias labeltext: label1.text
   Container{
      Label{
         id: label1
      }
   }// Container ends

   onCreationCompleted{
       console.debug(cost);
       var totalCost = cost + 50;
       labeltext = totalCost;
   }
}//Page ends

现在,问题是,对于任何cost传递 frompage1.qmlpage2.qml值,控制台中显示的值始终为 0,因此totalCost始终为 50。当我使用代码label1.text: cost时,它会显示属性的正确值。

在 中使用时属性是否未初始化onCreationCompleted?如果不是,那么在推送页面后使用和/或修改属性的方法是什么?我尝试调用自定义 javascript 函数,onCreationCompleted但它产生了相同的结果,即cost保持为 0。

4

1 回答 1

1

根据您的代码

var page = nextPage.createObject();
page.cost = netCost;

您正在使用创建页面createObjectonCreationCompleted完成后将被调用createObject。该时间成本为 0,因此 totalCost 将为 50。

然后你通过page.cost = netCost;

因此,如果您想计算正确的总成本值,那么您应该实现onCostChanged()处理程序并将代码从onCreationCompleted该处理程序移动。

于 2013-09-25T07:28:08.577 回答