'("Science-fiction"), ("Fantastic"), '
+
'("Historic"), ("Nonfiction"),
("Theatre")');
// …
})
db.changeVersion("", "1.0");
}
);
}
Cette fonction doit être appelée avant tout appel sur la base de données, par exemple
lors de son lancement, avec le gestionnaire de signal onCompleted sur le composant
racine (ApplicationWindow dans la plupart des exemples).
3.1. Lecture des données
Ensuite, il faudra lire chaque genre stocké en base de données et l'afficher à l'utilisateur
avant que l'interface de BiblioApp soit utilisable (lors de son lancement, en d'autres
termes). Une deuxième fonction se charge de cette tâche : une requête SQL est effectuée
lors de la transaction, puis chaque élément est transféré dans le modèle genreModel. Il
sera nécessaire d'y définir un deuxième rôle pour stocker l'identifiant de chaque genre
(l'identifiant interne au modèle n'a potentiellement aucun sens en base de données : elle
n'impose pas la continuité, il peut y avoir des trous dans la numérotation, notamment à
cause de suppressions).
function populateGenres() {
db.transaction(function(tx) {
var genres = tx.executeSql("SELECT * FROM genres");
for (var i = 0; i < genres.rows.length; ++i) {
var item = genres.rows.item(i);
genreModel.append({ text: item.genre, id: item.genre_id
});
}
});
}
Note > Avec ces changements, les listes déroulantes des genres et des livres
n'arriveront plus à accéder aux données. Le problème vient du fait que le composant
ComboBox ne sélectionne aucun rôle à afficher. Il faut donc lui indiquer
spécifiquement le rôle à lire et à afficher à l'utilisateur.
ComboBox {
id: fieldGenre
// …
textRole: "text"
365
+
'("Historic"), ("Nonfiction"),
("Theatre")');
// …
})
db.changeVersion("", "1.0");
}
);
}
Cette fonction doit être appelée avant tout appel sur la base de données, par exemple
lors de son lancement, avec le gestionnaire de signal onCompleted sur le composant
racine (ApplicationWindow dans la plupart des exemples).
3.1. Lecture des données
Ensuite, il faudra lire chaque genre stocké en base de données et l'afficher à l'utilisateur
avant que l'interface de BiblioApp soit utilisable (lors de son lancement, en d'autres
termes). Une deuxième fonction se charge de cette tâche : une requête SQL est effectuée
lors de la transaction, puis chaque élément est transféré dans le modèle genreModel. Il
sera nécessaire d'y définir un deuxième rôle pour stocker l'identifiant de chaque genre
(l'identifiant interne au modèle n'a potentiellement aucun sens en base de données : elle
n'impose pas la continuité, il peut y avoir des trous dans la numérotation, notamment à
cause de suppressions).
function populateGenres() {
db.transaction(function(tx) {
var genres = tx.executeSql("SELECT * FROM genres");
for (var i = 0; i < genres.rows.length; ++i) {
var item = genres.rows.item(i);
genreModel.append({ text: item.genre, id: item.genre_id
});
}
});
}
Note > Avec ces changements, les listes déroulantes des genres et des livres
n'arriveront plus à accéder aux données. Le problème vient du fait que le composant
ComboBox ne sélectionne aucun rôle à afficher. Il faut donc lui indiquer
spécifiquement le rôle à lire et à afficher à l'utilisateur.
ComboBox {
id: fieldGenre
// …
textRole: "text"
365
