0

初めてrequire.jsを試してみることにしましたが、ほとんどの場合、テンプレートのロードを動的に処理しようとするところまでは問題なく動作します。

基本的に、テンプレートがすべて読み込まれて利用可能になるまでアプリを続行しないという要件があります。

その趣旨で、モジュール 'templating' が作成されました。返す前にロードする必要があるテンプレートの配列 (既に利用可能) の定義をインポートします。

これはおそらくアンチパターンだと確信しているので、どうすれば修正できますか?

app -> requires "templating"
    define templating ->
        - loop through an array of templates and dynamically create a list
        - define all templates (via text!) so later we can require("template-name")
        - also tried, require all templates 

私が観察したのは、すべてのテンプレートが読み込まれる前に、テンプレート モジュールが読み込まれ、アプリで使用できるようになることです。

その後、テンプレートをフェッチする XHR が続きます。

すべてのテキストがロードおよびコンパイルされる前に、モジュールが戻らないようにするにはどうすればよいですか? 疑似コードまたは例へのリンクは問題ありません。

4

1 に答える 1

1

実際、プロジェクトの早い段階で1つのソリューションがあり、その後別のソリューションに移行しました。

[1]同期-アプリでjQueryを使用しているため、アプリ全体でjQueryDeferredオブジェクトを使用できます。すべてのテンプレートがロードされたときに.resolved()が呼び出されるだけのDeferredのインスタンスを1つ作成しました。次に、テンプレートを使用しようとするたびに、次のようなコードでラップしました。

$.when(cache.templatesLoadedPromise).done(
  function () {
    // Render the view.
    $("...").html($.tmpl(cache.template, jsonData));
  });

その後、テンプレートが使用可能になるまで、レンダリングは行われません。

[2]モジュールごとのロードと登録-ソリューション[1]に夢中になる人は誰もいなかったので、各モジュールにその特定のモジュールに必要なテンプレートのみをロードしてもらいたいと考えました。そこで、それらを「text!something.tmpl」要件としてリストし、それを要件として持つモジュール内の最初の行として、その特定のテンプレートの登録を開始しました。この例では、ICanHandlebarz(ICanHaz for Mustacheと同様)と一緒にテンプレートエンジンとしてHandlebarsを使用します。したがって、ich.addTemplate( "something"、something);を呼び出します。モジュールコードの先頭にあります。

いくつかのケースでは、複数のモジュールが同じテンプレートを使用していたため、登録を行う前に、テンプレートがすでに登録されているかどうかをテストする必要がありました。

それらの1つがあなたの問題を解決するのに役立つことを願っています。

于 2012-04-13T16:54:22.400 に答える