2011-11-06 15 views
4

私はロードテンプレートのicanhaz.jsと口ひげを使用しています、と私は次のメソッドを使用してオンデマンドでヒゲのテンプレートをロードしていますのではなく、Documentオブジェクトを返します。しかし、デバッガで返される変数は、(時には)を私が使用できる生の文字列ではなくDocumentオブジェクトとして戻します。テンプレートファイルのhtmlにファイルの先頭にネストされたDOM要素がない場合は、テンプレートが必要に応じて読み込まれるため、時々言います。これは非常に奇妙な振る舞いで、私が説明する助けが大好きです。ロード口ひげテンプレートは、生の文字列

ので、例えば、テンプレートファイル:ロードされたときに

<div> 
    <div>My name is {{name}}</div> 
</div> 

は、Documentオブジェクトとして返さなるだろう。一方

、このテンプレートファイル:生の文字列として、必要に応じて

<div></div> 
<div> 
    <div>My name is {{name}}</div> 
</div> 

が返されます。

子供がいない最上位のdivに、ドキュメントと文字列として識別されているテンプレートが異なるのはなぜか分かりません。何か案は?

答えて

2

引数を$.get()に指定していないので、「インテリジェントな推測」モードで実行しています。 related documentationは言う:

何も指定されていない場合は、jQueryのでは、JavaScriptのオブジェクトを生成します1.4 JSON で、それは(XML MIMEタイプはXMLを生み出すレスポンスのMIME タイプに基づいて推測しようとします1.4 scriptはスクリプト を実行し、それ以外の文字列は文字列として返されます)。

だから、あなたのサーバがtext/xmlとしてtext/html(またはtext/plain)などのテンプレートの一部などを送信される可能性があります。実際にそうであるかどうかを確認するために、応答ヘッダー(Fiddlerまたは同等のツールを使用して)を調べることは興味深いでしょう。さておき、リクエストのデータ型を指定すると、完全に問題を取り除く必要があるとして

jQuery.get("/js/templates/" + name + ".mustache", function(data) { 
    window.ich.addTemplate(name + "_template", data); 
    callback(); 
}, "html");  // Always return HTML as plain text. 
関連する問題