QML - 动态创建ListModel(JAVASCRIPT问题)

时间:2017-07-09 18:36:58

标签: javascript qt qml

这是我的代码,它有效!

ListModel {
    id: idValueList

    Component.onCompleted: {

        for (var i = 0; i < 21; i++) {
            append(createListElement(i));
        }
    }

    function createListElement(id) {
        return {
            myId: id + 1, myValue: ""
        };
    }
}

但是,我需要用for myXmlListModel.get(myXmlListModel.count - 1).myValue替换for循环中的“21”,它来自XmlListModel,动态列表模型停止工作!

有趣的部分是代码

Text{
    x:0 ; y:0
    text: myXmlListModel.get(myXmlListModel.count - 1).myValue;
}

打印给我的确是21。但是如果我在for循环中使用表达式myXmlListModel.get(myXmlListModel.count - 1).myValue,那么一切都无效。

怎么可能?

1 个答案:

答案 0 :(得分:0)

原因应该很容易理解:

Component.onCompleted: [...]
当组件完成时,

在非常特定的时间点执行。 这不一定是myXmlListModel的内容可用的时间点。它可能已经全部创建,但可能仍然是空的。因此

Component.onCompleted: [...]
ListModel

已执行,myXmlListModel.count确实仍然是0,而在此之后立即更改为21 - 所以当您阅读Text时已经有ListModel适量。

您应该填写myXmlListModel.onCompleted 的时间点不是,当它完成时,但是一旦内容准备就绪,您可以处理:

myXmlListModel.onCountChanged

clear()

(对于后者,您应该考虑先在ListModel上致电Spree::Variant.class_eval do ### WHITELISTED ATTRIBUTES ### self.whitelisted_ransackable_attributes |= ['is_master'] end