5

私は自分自身をバックボーンハッカーと呼んでいます。フレームワークで何ができるか、どこに限界があるかを知っています。また、いくつかのテンプレート フレームワークの経験もあります。

複雑でネストされたビューを作成する方法を人々が説明する多くのチュートリアルを見てきました。それらのほとんどは、テンプレートを使用して部分的に構築し、次に親ビューのrenderメソッド内で、テンプレート化された子ビューを結合します

私には、宣言型コードでレイアウト レンダリングを処理する必要がある理由がわかりません。Flex から来て、私は決してそれをしないように教えられました。私は常にレイアウトの説明と変数のバインディングをマークアップに残し、イベント処理はこのマークアップを使用する宣言 (ビュー インスタンス) コードに任せました。

ただし、私がテストしたテンプレート フレームワークのどれも、ネストされたビューを使用して複雑なマークアップを作成できませんでした。テンプレートからテンプレートを実際に呼び出して、View オブジェクトをインスタンス化することはできません。これは、特に型名を指定できる data 属性を使用して、技術的に可能と思われます。

次に、ルート レベルの View クラスの render メソッドが行う必要があるのは、このテンプレートを HTML マークアップに変換し、子オブジェクトの型を特定し、それらのいずれかの子ビュー インスタンスを作成し、さらに保持することだけです。これらの子オブジェクトが子オブジェクト自体を持つ必要がある場合。すべてのビューには、モデル コンテキストが与えられます。基本的に、私たちが常に扱うボイラープレートのすべてのステップですが、Backbone.View レベルで自動化されています。

他にこれについて考えている人はいますか?なぜ誰もこれを使用していないように見えるのですか?

4

2 に答える 2

1

メソッドで子ビューをインスタンス化しrenderても意味がないことに同意します。子ビューを初期化するときに追加の引数を渡したいことが多いため、プロセスを完全に自動化することを躊躇しますが、たとえば、次のようになります。

var childCollection = someLogicToCreateTheChildCollection();

new ChildView({
  collection : childCollection
});

initializeしたがって、代わりに、必要な子ビューを作成してrenderから、テンプレートをレンダリングして、DOMの要素に子ビューを割り当てます。

このように、私のレンダリング関数はDOMの順序を宣言するものではありません(多くの例が追加で示されているように)。テンプレートはDOMの順序を設定し、レンダリング関数は子setElement().render()ビューだけです。

于 2012-05-07T14:31:30.620 に答える
1

render を使用する必要はまったくなく、主にコードに変更が加えられた後の再レンダリングのために予約されていることに注意してください。CSS セレクターに基づいてビューを直接バインドできます (これについてはドキュメントを参照してください)。

さらに、データ バインディングを大幅に簡素化し、必要な「手動」作業を削減するバックボーン用のモデル バインディング拡張機能があります。あなたはそれをチェックしたいかもしれません。

http://github.com/derickbailey/backbone.modelbinding

最後に、親子関係のレンダリングについて述べます。 ループ内で DOM を呼び出さないでください。これは信じられないほど非効率的であり、少なくとも 1 つの理由として、parents render メソッドでのみ親子関係が構築されます。たとえば jQuery を使用して各子プロセスをレンダリングすると、ブラウザーで多くの作業が発生します (最新のブラウザーでこれに気付かない場合は、IE8 で試してください)。

于 2011-12-04T02:43:26.870 に答える