7

KnockoutJS アプリケーションを正しい方法で構築する方法を考えています。

  • 公式ドキュメントでは、ほとんどの場合、単一の ViewModelのみが使用されています。

いくつかの機能を実装しただけで、私のコードは非常に混乱し、オブジェクト指向のバックグラウンドを持っているため、そのようなアーキテクチャに非常にアレルギーがあります。したがって、より良い解決策があるはずです。

JavaScript の経験があまりないので、Stackoverflow を検索していて、これら 3 つのオプションを見つけました。そこで、最初の 2 つのオプションを試しましたが、満足できませんでした。

  • ここのように複数のViewModelを持っています。

どの DOM 要素がどの ViewModel を取得するかを判断するのは非常に難しいと思います。また、DOM 要素の外部から呼び出される関数もいくつかありました。この種のアーキテクチャで使用した ViewModel が少なすぎたのかもしれませんが、ViewModel 間の通信は異なっているように見えました。では、それを適切に行うにはどうすればよいでしょうか。

  • サブビューを持ち、 with バインディングを利用する(これら 3 つ2 番目のオプション)。

これは、1 つのビュー モデルからドキュメント全体のバインディングを作成できるため、私の好みのタイプのアーキテクチャでした。また、with バインディングを使用して、コードをサブチャンクに構造化し、必要な場所にバインドすることもできます。ただし、このオプションには関数の代わりにオブジェクト リテラルが必要であり、この回答で説明されているように劣っています。

方法 3 は少しやり過ぎのようで、オブジェクト リテラルも使用するため、試していません。

私のコードを構造化し、オブジェクトリテラルを使用せずに完全に制御する方法はありますか?

これがあまり混乱しないことを願っています:-P

4

1 に答える 1

3

言及したオプションのいずれについても、オブジェクト リテラルを使用する必要はありません。サンプルでは、​​コードを単純化するためにそれらを使用しただけです。適切と思われる方法で個々のビュー モデルを作成することを選択できます。

たとえば #3 では、http://jsfiddle.net/rniemeyer/PctJz/149/のようなコンストラクター関数を使用できます。もちろん、実際のデータは静的ではなく関数に渡されます。#2と同じで、「View」オブジェクトにラップするだけです。

于 2012-10-14T17:56:30.713 に答える