Recarregar modelo ListView com U1db.Query

0

Eu tenho um ListView com o modelo dele vindo de um U1db.Query O formulário de operação de leitura e salvamento U1db funciona, mas eu preciso atualizar o modelo ListView quando um novo item é inserido no banco de dados, para exibir o último conteúdo recuperado com a consulta. Eu também tentei com ListView and UbuntuListView ', mas não posso resolver este problema. Eu não posso "puxar" a lista para atualizá-lo, mas eu recebo um erro como:

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

Eu olhei para o doc do SDK, mas não encontrei nenhum exemplo útil. Obrigado por qualquer sugestão!

Aqui, o trecho (omiti alguns detalhes):

 //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: ["*", "*"]
       }
    
por userFulvio999 05.07.2016 / 18:02

1 resposta

0

Depois de alguns dias de tentativas, descobri como "consertar" isso. Um ListView com uma consulta fom U1db como "modelo" tem uma atualização automática embutida do modelo (por exemplo: se você adicionar / remover itens no banco de dados e o resultSet da consulta muda, o modelo será atualizado). Mas, usando o código acima dentro de um AdaptiveLayout, e alternando entre páginas com instruções como:

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

a atualização automática do modelo não funciona!

Se você incluir o código da página do arquivo 'AddPerson.qml' dentro do mesmo arquivo qml onde está definido o AdaptiveLayout, a atualização automática do modelo ListView funciona !!!

OBSERVAÇÃO : não sei se esta solução é uma solução alternativa ou um erro qml.

    
por userFulvio999 12.07.2016 / 15:06