AlloyでSQL Sync Adapterを使っているときに、CollectionからModelを全て削除する、つまりテーブル内のレコードを全削除する方法です。
SQL版
Collectionを拡張して全削除用のメソッドを追加、その中で、SQLのDELETE文を発行してレコードを削除します。
その後 sync
イベントを発生して、データベースの状態とCollectionを同期させておくようです。
exports.definition = {
...
extendCollection: function(Collection) {
_.extend(Collection.prototype, {
deleteAll : function() {
var collection = this;
var sql = 'DELETE FROM ' + collection.config.adapter.collection_name;
var db = Ti.Database.open(collection.config.adapter.db_name);
db.execute(sql);
db.close();
collection.trigger('sync');
}
});
return Collection;
}
};
ループ版
参考URLには、以下のようにCollectionが持つModelを順番に destroy()
していく方法も紹介されていましたが、やはり上記のようにSQLを直接発行する方がパフォーマンス的にも良いようです。
Modelの中身によって削除するかしないかを判別する場合などは、この方法も使えると思います。
while(collection.length > 0) {
collection.at(0).destroy();
}