2016-12-02 2 views
0

バックボーンのさまざまな要素の使い方がかなり曖昧であることがわかりました。私の見た目からは、これはバックボーンがフレームワークになりたくないという意図だったが、ツール/オブジェクトのセットのほうが多かった。backbonejsビューのinitialize()とrender()の正しい使い方は何ですか?

私はバックボーンのほとんどの部分を理解していますが、私はまだビューのinitialize()とrender()呼び出しの正しい使い方について質問しています。言い換えれば、それぞれの中にどのような論理を置くべきか。

誰かがベストプラクティスを説明したり、ビュー内でこれらの呼び出しの正しい使用と考えられるものはありますか?

+0

あなたは既にこのリンクに出会ったいずれにせよ、私は同じ問題を抱えていて、ここでそれらの大部分を解決しました。あなたが参照しているのと同じトピックがサブビューを引き起こしますが、すべてがどのように機能するかについては良い考えが得られます。 http://stackoverflow.com/質問/ 9337927/how-to-handle-initializing-and-rendering-backbone-jsのサブビュー – rule

+2

あなたは_correct usage_に触れていません。記述されていないので、誰かがあなたに与えることができるでしょう彼らの意見ですが、それはSOのことではありません。公式ドキュメントからリンクされている[Backbone primer](https://github.com/jashkenas/backbone/wiki/Backbone%2C-The-Primer)があり、_initialize_ calling_render_の例を示しています。これは個人的には好きではない。 – mikeapr4

答えて

1

これはかなり遠い質問ですが、私はそれを試してみましょう。ここで重要なことは、これらの呼び出しに対して「正しい使用法」などはないということです。バックボーンは、目的に応じて柔軟に対応できるため、お客様のニーズに適応することができます。だからこそ、それはまだ洗練されているが、「懐疑的な」フレームワーク(それは「私の道かハイウェイ」なのかを伝える)の世界の中にある。

バックボーンはレンダリングに関して魔法を使用しません。 render()メソッドはノーオペレーションであり、自動的に呼び出されることはありません。その存在は、物事が通常どのように行われるかのヒント以上のものではありません。

ただし、initialize()メソッドは、ビューのインスタンス化時に自動的に呼び出されます。バックボーンは、その時点で、ビューの最上位のDOM要素(el)が既に作成されていて、それに添付される準備ができていることを保証します。

しかし、これも非常に小さいです。トップレベルの要素はありますが、コンストラクタにoptions.elを渡して、elを既存の要素に設定していない限り、DOMにまだ添付されていません。 elをDOMに挿入することもあなたの仕事です。

あなたは物事を結ぶ方法を自由に決めることができます。私は一般的にやっていることはこれです:

  • 私の意見のほとんどは、一般的にビューのtemplateプロパティに割り当てられたテンプレートを、持っています。 (もう一度、大会には、魔法は含まれていません。fooと名付けることができます)。そのテンプレートはinitialize()でコンパイルされています。

  • initialize()では、ビューが表すはずのモデルまたはコレクションとの関係を設定します。つまり、モデル/収集イベントを観察し、データが変更されたときにrenderに電話をかけます。 (データソースとしてBackboneエンティティを使用する必要はありません。もちろん、何でも構いません)。

  • render()では、データがテンプレートに入力され、結果はelのinnerHTMLになります。その後、DOMにまだelが挿入されていない場合は、挿入します。

  • render()への最初の呼び出しは、データの準備が整うと実行されます。適切なタイミングはアプリに依存します。おそらくrender()initialize()の最後の呼び出しであるか、または後で何らかのイベントが実行されます。

繰り返しの定型文のように聞こえる音がたくさんある場合は、それはまさにそれです。 Marionetteのようなフレームワークは、それを世話するためにバックボーンの上に存在します。

しかし、そのフレームワークの魔法には大きなパフォーマンス上のペナルティがあります。だから私はたくさんのビューを生成しなければならないとき、私はジェネリックバックボーンのものに固執します(テンプレートハンドリングを高速化するために私のowncomponentsの1つを使用します)。

関連する問題