0

これを例として使用します: http://mustache.github.com/#demo、テンプレートと json は機能的に var に移動できます:

template = '<h1>{{header}}</h1>{{#items}}{{#first}}<li><strong>{{name}}</strong></li> {{/first}}{{#link}} <li><a href="{{url}}">{{name}}</a></li> {{/link}}{{/items}}{{#empty}} <p>The list is empty.</p>{{/empty}}';

これは物事が壊れるところです:

$.ajax({
    url: "must_template.js",
    dataType: "html",
    success: function(data) {
    template = data;
    }
});

$.ajax({
url: "theJson2.txt",
dataType: "json",
success: function(data) {
        json = data;
        //json = $.parseJSON(data);
    }
});

Chrome のコンソールには var とまったく同じ内容が表示されますが、Mustache は入力で「未定義」であるため、入力で中断します。

Uncaught TypeError: Cannot call method 'indexOf' of Undefined

dataType を変更して $.parseJSON を使用して解析しようとしましたが、外部ファイルからテンプレートまたは JSON をインポートしても何も機能しません。

JavaScript オブジェクトのトラブルシューティングに関するヒントがあれば、それも歓迎します。

更新: コードはこちら: http://dev.plitto.com/sandbox/mustache_riff/index4.html theJson.txt は JSON です。正しく引っ張られています。console.log(data.header) が正しく返されます。must_template.js は Mustache テンプレート ファイルです (外部からプルすると、さまざまなテーマが可能になります)。

4

4 に答える 4

2

AJAX リクエストは非同期リクエストです。ajax 関数呼び出しの外側で mustache to_html を実行すると、機能しません。AJAXリクエストの前に実行されるためです。

以下を試してください。

must_template.html ファイルには、

<h1>{{header}}</h1>
{{#items}}{{#first}}
<li><strong>{{name}}</strong></li> 
{{/first}}{{#link}} <li><a href="{{url}}">{{name}}</a></li> {{/link}}{{/items}}   
{{#empty}} <p>The list is empty.</p>{{/empty}}

そして、あなたのコードは

$.ajax({
       url: "must_template.html",
       dataType: "html",
       success: function(data) {
           var template = data;

           $.ajax({
                      url: "theJson2.txt",
                      dataType: "json",
                      success: function(data2) {
                          var json = data2;
                          var html = Mustache.to_html(template, json);
                          $("#yourtargettag").html(html);                              
                      }
                  });
       }
   });
于 2010-12-16T11:05:46.403 に答える
0

これはスコープの問題であることがわかりました。

テンプレート変数は $.ajax() 呼び出しの前に定義され、値は $.ajax 呼び出し内でのみ有効です。

于 2010-07-28T20:14:56.457 に答える
0

2つの違いは何ですか?そして、Json2.txt と must_template.js には何が含まれていますか?

以下を使用して JSON を解析します。

data = JSON.parse(data);

オブジェクトの内容を確認するには、Firebug または Safari / Chrome の JS コンソールを次のように使用します。

console.log(data);

より多くの情報を入手できれば、私たちはより多くの助けになることができます:)

于 2010-07-28T05:05:15.687 に答える