使用 U1db.Query 重新加载 ListView 模型

使用 U1db.Query 重新加载 ListView 模型

我有一个 ListView,其模型来自 U1db.Query U1db 的读取和保存操作有效,但当在数据库中插入新项目时,我需要更新 ListView 模型,以显示使用查询检索到的最后内容。我也尝试过使用 ListView andUbuntuListView`,但我无法解决这个问题。我无法“拉”列表来刷新它,但我收到如下错误:

`Property 'update' of object U1db::Query(0xe097e0) is not a function`

我查看了 sdk 文档,但没有找到任何有用的例子。谢谢您的任何建议!

这里是片段(我省略了一些细节):

 //delegate component for the listView
Component {
            id: peopleListDelegate

            Item {
                id: personItem                

                //draw a rectangle aroun the content to display 
                Rectangle {
                 //content omitted 
                }

                // This mouse region covers the entire delegate
                MouseArea {
                   //content omitted              
                }

                Row {
                    id: topLayout                    
                    //display some content to be shown inside the Rectangle
                 }
            }
        }




//the listView that show DB Query result
    ListView  {
                     id: listView
                     anchors.fill: parent
                     model : allPeopleQuery
                     delegate: peopleListDelegate

                     highlight: highlightComponent                 
                     focus: true

                     Component{
                         id: listHeader

                         Item {
                             width: parent.width
                             height: units.gu(10)

                             Text{
                                 anchors.bottom: parent.bottom
                                 anchors.horizontalCenter: parent.horizontalCenter
                                 text: i18n.tr("<b> Total people found: </b>") + listView.count
                             }
                         }
                     }

                     header: listHeader

                     PullToRefresh  {                            
                             refreshing: listView.model.status === ListModel.Loading
                             onRefresh: listView.model.update()  // HERE THE PROBLEM, (also using reload() doesn't work)
                         }
                 }

    U1db.Database {
            id: mypeopleDb
           .....
        }

       U1db.Index{
           database: mypeopleDb
           id: all_field_index
           expression: .......
       }


      U1db.Query {
           id: allPeopleQuery
           index: all_field_index
           query: ["*", "*"]
       }

答案1

经过几天的尝试,我找到了如何“修复”这个问题。带有 U1db 查询作为“模型”的 ListView 具有内置的模型自动刷新功能(例如:如果您在数据库中添加/删除项目并且查询的结果集发生变化,则模型将被更新)。但是,在 AdaptiveLayout 中使用上述代码,并使用以下语句在页面之间切换:

myAdaptiveLayout.addPageToNextColumn(aPage,Qt.resolvedUrl('AddPerson.qml'))

模型的自动刷新不起作用!

如果您在定义 AdaptiveLayout 的同一个 qml 文件中包含来自文件“AddPerson.qml”的页面代码,则 ListView 模型自动刷新就可以起作用!

笔记:我不知道这个解决方案是一种解决方法还是一个 qml 错误。

相关内容