我无法从ListItemComponent内部访问Datasource id。有人可以帮我解决这个问题吗?
ListItemComponent {
type: "item"
Container {
id: listviewcontainer
Container {
preferredWidth: 768
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
CustomImageView {
leftPadding: 10
rightPadding: 10
url: ListItemData.from_image
horizontalAlignment: HorizontalAlignment.Left
verticalAlignment: VerticalAlignment.Center
}
Container {
preferredWidth: 538
layout: StackLayout {
orientation: LayoutOrientation.TopToBottom
}
Container {
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
Label {
text: ListItemData.from
textStyle {
base: SystemDefaults.TextStyles.TitleText
color: Color.create("#2db6ff")
}
}
ImageView {
imageSource: "asset:///Home/img.png"
verticalAlignment: VerticalAlignment.Center
}
}//Container
Label {
text: ListItemData.message
multiline: true
textStyle {
base: SystemDefaults.TextStyles.SubtitleText
}
content {
flags: TextContentFlag.Emoticons
}
}
Label {
id: time
text: ListItemData.time
textStyle {
base: SystemDefaults.TextStyles.SmallText
color: Color.create("#666666")
}
}
}//Container
ImageButton {
id: delete_btn
defaultImageSource: "asset:///Icon/delete.png"
pressedImageSource: "asset:///Icon/delete.png"
verticalAlignment: VerticalAlignment.Center
horizontalAlignment: HorizontalAlignment.Right
onClicked: {
deleteMessage(ListItemData.tid, ListItemData.uid);
}
function deleteMessage(tid, uid) {
var request = new XMLHttpRequest()
request.onreadystatechange = function() {
if (request.readyState == 4) {
var mResponse = request.responseText
mResponse = JSON.parse(mResponse)
var mResponseStatus = mResponse.response[0].receive.status;
var mMsg = mResponse.response[0].receive.message;
if (mResponseStatus == 1) {
msg_DataSource.source = "newurl.com" // This line not works here..
msg_DataSource.load(); // This line not works here..
} else if (mResponseStatus == 0) {
}
}
}// end function
request.open("GET", "myurl.com", true);
request.send();
}// deleteMessage
}//ImageButton
}//Container
}//Container
}//ListItemComponent
这里无法解决以下两行问题
msg_DataSource.source = "newurl.com"
msg_DataSource.load();
我尝试过如下,但这也无效
listviewcontainer.ListItem.view.dataModel.message_DataSource.source = "myurl.com";
listviewcontainer.ListItem.view.dataModel.message_DataSource.load();
或者
listviewcontainer.ListItem.view.dataModel.source = "myurl.com";
listviewcontainer.ListItem.view.dataModel.load();
答案 0 :(得分:1)
使用以下代码将对象存储到全局变量的另一种最简单的方法,这对我来说很好。
onCreationCompleted: {
Qt.tabbedPane = tabbedPane;
Qt.homeTab = homeTab;
}
这里我在页面创建时将tabbedPane存储在全局变量Qt.tabbedPane中Completed.Now我能够使用Qt.tabbedPane从ListItemComponent访问它。
希望它有所帮助。
答案 1 :(得分:0)
使数据模型可访问的最简单方法是向数据模型声明property alias
,无论它在何处定义,例如在ListView
QML文件中。这将使您的数据模型可以通过此property alias
访问QML中的顶级组件。实际上,它为您提供了QML中其他任何地方的数据模型的全局参考。
例如,如果数据模型被称为msg_DataSource
,那么在定义它的QML文件中,您可以创建如下属性别名:
property alias myDataModel: msg_DataSource
然后在ListItemComponent deleteMessage
函数中,您可以像这样使用myDataModel
:
myDataModel.source = "newurl.com"
myDataModel.load();
注意:我相信您也可以使用信号和插槽以更优雅的方式执行此操作,但这种方式应该更快更容易理解。