私はこれについていくつかの調査を行いましたが、KOとJQMについては特に経験がありません。
明らかに、KOがいくつかのJQMコントロールとうまく機能するためには、いくつかのカスタムバインディングが必要です。しかし、次の問題に直面したときに最適なデザインが何であるかはわかりません。
個別のdivを持つ単一のindex.htmlファイルがありますdata-role="page"
。
アプリケーション全体で多くの共有ロジックがあるため、ページごとに個別のビューモデルを用意することは必ずしも意味がありません。そのため、現在、一度viewModel
呼び出している単一のオブジェクトがありますapplyBindings
。当然、これは最初のページが読み込まれると発生します。
問題は、ユーザーが次のページに移動するまでJQMが後続のページの要素を変更せず、applyBindings
呼び出された時点でhtmlが変更されないままになることです。カスタムバインディングが初期化されると、まだ変更されていないhtmlで機能します。
簡単な例(コードを貼り付けない場合)は、 JQMがそれ自体を作成する前に呼び出すKnockoutjs、jqueryモバイルスライダーです。slider('refresh')
slider
イベントで変更されたhtmlにアクセスできることは知っていますpageinit
が、問題は、カスタムバインディングのイベントと、カスタムバインディングが使用されているページのイベントの2つの相互依存イベントがあるinit
ことpageinit
です。これを回避する最善の方法がわかりません。
最初のアイデア:
各カスタムバインディング内の不一致を処理するだけです。これは例で行われています。たとえば、呼び出しをラップして、JQMがtry...catchで初期化するものを更新します。私はこれが好きかどうかわかりません。
別々のhtmlファイルに分割します。共通のデータがたくさんあり、パフォーマンスに影響を与えるため、これも好きかどうかはわかりません。
分割し
viewModel
て別の要素に適用してから、それぞれのpageinit
イベントの各ページにのみバインディングを適用します。ほとんどのビューモデルはすべてのページに必要であるため、これには少し再設計が必要になります。JQMに事前にページを初期化させる方法はありますか?もしそうなら、これは悪い動きでしょうか?
KOカスタムバインディングがいつ初期化されるかを制御する方法はありますか?それに関する問題は、個々のページへのカスタムバインディングを効果的に調整していることです。
Javascriptでバインディングを追加します(例:https ://groups.google.com/forum/?fromgroups =#!topic / knockoutjs / N33EzQ5nWUU) 。これについてはよくわかりませんが、あまりきれいではないようです。
他に何か提案はありますか?人々はこれまでこの問題にどのように取り組んだことがありますか?