3

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 () {});
4

0 に答える 0