3

我无法从 ListItemComponent 内部访问数据源 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();
4

2 回答 2

1

使用以下代码将对象存储到全局变量的另一种最简单的方法对我来说很好用。

         onCreationCompleted: {
         Qt.tabbedPane = tabbedPane;
         Qt.homeTab = homeTab;
        }   

在这里,我在页面创建完成时将 tabbedPane 存储在全局变量 Qt.tabbedPane 中。现在我可以使用 Qt.tabbedPane 从 ListItemComponent 访问它。

希望能帮助到你。

于 2013-04-02T11:43:45.897 回答
0

使数据模型可访问的最简单方法property alias是在定义数据模型的任何地方声明 a ,例如在ListViewQML 文件中。这将使 QML 中的顶级组件可以从此访问您的数据模型property alias。实际上,它为您提供了从 QML 中其他任何地方对您的数据模型的全局引用。

例如,如果您的数据模型被调用msg_DataSource,那么在定义它的 QML 文件中,您可以像这样创建属性别名:

property alias myDataModel: msg_DataSource

然后在你的ListItemComponent deleteMessage函数中,你可以myDataModel这样使用:

myDataModel.source = "newurl.com" 
myDataModel.load();

注意:我相信您也可以使用信号和插槽以更优雅的方式执行此操作,但这种方式应该更快更容易理解。

于 2013-02-03T09:54:41.300 回答