0

みなさん、coffeescript で以下のビューを検討してください。

window.Aview = class AView extends Backbone.View

  getT: (callback) =>
    callback()

  getTransactions: (callback) =>
    @getT( =>
      callback()
    )            
  render: =>
   @getTransactions(
     (results) =>
       $(@el).html(@template({}))
   )

これは期待どおりにレンダリングされます (以下を参照)。 タブの正しいレンダリング

ただし、getTransactions のロジックを window.db.transaction を使用するように変更すると (window.db は websql db 変数を指します)、次のようになります。

  getTransactions: (callback) =>
    window.db.transaction( =>
      callback()
    )          

次に、以下に示すように、レンダリングが台無しになります。

window.db.transaction を使用すると正しく表示されない

なぜこれが起こるのかわかりません。これは backbonejs を使用する方法ではない可能性が高いと思いますが、ローカルで定義された getT メソッドの代わりに window.db.transaction を使用すると、jquery モバイル タブのレンダリングがめちゃくちゃになる理由が知りたいです。

ご協力いただきありがとうございます!

4

1 に答える 1

0

私は問題を理解しました。私が疑ったように、私は複数のレベルで間違っていました。ここでの目標は、websql データベースから取得したデータをレンダリングすることでした。問題は、データベース データがコールバックを介して非同期的に返されることです。ビューは、データが完了するまで何とか「待機」する必要があります。正しい方法は

  1. jquery deferred を使用します ( http://eng.wealthfront.com/2012/12/jquerydeferred-is-most-important-client.html記事を参照)
  2. backbonejs ビューの render メソッドで - 通常の backbone js レンダリング メカニズムを使用して、データなしでページをレンダリングします。
  3. jquery promise インターフェイスを使用して、動的コンテンツ (クエリが非同期で返すデータ) をレンダリングします。
  4. jquery 拡張機能を適用するためにトリガー create を呼び出します ( http://view.jquerymobile.com/1.3.0/docs/faq/injected-content-is-not-enhanced.phpを参照 )。 jquery の拡張機能は、動的 DOM 要素に対してプログラムで適用する必要があります。
于 2013-03-01T16:56:00.130 に答える