0

ツリー ビューを作成するために、テンプレートを介してマップされた大きなネストされた監視可能な配列があります。リストは動的ですが、ツリーには 1000 以上の要素が存在する可能性があります。

このコレクションの読み込みと検索でパフォーマンスの問題が発生しています。特に IE8 と iPad で顕著です。クロムは大丈夫そうです。

コレクション内の要素は実際には変更されないため、オブザーバブルの「通知」の側面は必要ないと思いますが、データバインディングを利用したいと考えています。

観察できないビューモデル内のオブジェクトにデータバインディングを行う方法はありますか? ko.mapping.fromJS() を使用せずに、観測不可能な複雑なデータ コレクションを作成する方法はありますか?

4

1 に答える 1

0

変更されず、監視できないプロパティを完全にバインドできます。マッピングプラグインと同じ方法で大きなオブジェクトを別のオブジェクトにマッピングしたいだけのようですが、オブザーバブルを作成する必要はありません。単純にJQuery.extendを使用することを検討しましたか?

配列が観察可能な場合は、この優れた投稿のガイドラインに従ってください。

また、ネイティブ テンプレートから jquery.tmpl などのサード パーティに切り替えることでパフォーマンスが向上したという話を聞いたことがあります (これが当てはまるかどうかはわかりません)。

編集

コメントでさらに明確にした後。問題は、バインディングがプロパティがオブザーバブルであると想定していたことです。テンプレートには、次の行があります。

 <!-- ko if: IsSectionHeader() --> 

これは、オブザーバブルIsSectionHeaderの値を取得するためにオブザーバブルを実行しています。Observableは関数であるため、IsSectionHeader が Observable の場合は問題ありません。生モデルに切り替えると、これは機能しません。firebug などのツールを使用してエラー コンソールを確認することをお勧めします。エラーが正確に報告されました。

とにかく、修正は二重括弧を削除することでした。ko バインディングは、プロパティが監視可能であっても角かっこの有無にかかわらずオブザーバブルを受け取ることができるため、いずれにしても必要ではなかったことに注意してください。

お役に立てれば。

于 2012-05-24T20:38:53.833 に答える