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

ここでは、次の2行を解決できません

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データモデルにアクセスできるようにする最も簡単な方法は、データモデルが定義されている場所(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 に答える