这是我的代码,它有效!
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
,那么一切都无效。
怎么可能?
答案 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