Lawnchair (0.6.1) で厄介な問題に遭遇しました。グローバルにアクセス可能な 2 つのコレクション/Lawnchairs が必要です。どちらもwebkit-sqliteアダプターを使用します。Lawnchair とアダプターをロードした直後に、次のように宣言します。
var clientStore = Lawnchair({name: 'clients'}, function () {});
var companyStore = Lawnchair({name: 'companies'}, function () {});
// other global variables
...
デスクトップの Safari と Chrome では、Phonegap (3.0.0) を使用するエミュレーターで iPad やその他の iOS デバイスと同じように、すべてが順調に進んでいます。まったく問題ありません。両方のデータベースが Web インスペクターと Weinre に表示されます。JQuery Mobile イベント (バージョン 1.3.2 および 1.4.0 ベータ版) のいずれでも使用できます。Weinre でデータベース オブジェクトを手動でチェックすると、それらが実際にwebkit-sqliteアダプターを使用していることを確認できます。
ただし、Android で Phonegap アプリを実行すると、clientStore
アクセス可能で使用できるのは のみです。にアクセスしようとするとcompanyStore
、次のエラーが表示されます。
companyStore.all(function (allEntries) {
console.log(allEntries);
...
> TypeError: Cannot call method 'all' of undefined
Android デバイスの Weinre に表示される唯一のデータベースはclients
データベースです。すべてがロードされた後に Weinre インスペクター コンソールから手動でcompanies
データベースを初期化しても、[リソース] タブのデータベースのリストに影響を与えたり、他のものを変更したりしません (上記のエラーが視覚的に消えることを除いて)。
プログラムで「未定義」にアクセスしようとするとcompanyStore
、たとえば、すべての企業がリストされているページに誰かが切り替えると、Android デバイスの UI が「クラッシュ」します。その後、コンソールには何も出力されません。前述のように、他のすべてのプラットフォームは問題なく動作します。
ばかげて間違ったことをしているだけですか、それともバグ/機能に遭遇しましたか?
助けてくれてありがとう、これは私を壁に追いやっています:(。
編集:これまでのところ、標準のDOMアダプターを使用すると、すべてのプラットフォームで機能します。とりあえずこれで我慢しようと思います。誰かが同じ問題に遭遇した場合のために、DOM アダプターを明示的に使用する方法を次に示します。
var clientStore = Lawnchair({name: 'clients', adapter: 'dom'}, function () {});
var companyStore = Lawnchair({name: 'companies', adapter: 'dom'}, function () {});