0

バックボーンを使用して、ビューの1つにテンプレートとデータの両方を遅延読み込みしています。「単純さ」(複数の非同期サーバー呼び出しを行う必要がないという点で)については、同じファイルpersons.phpから両方をロードしようとしています。これは次のようなものを返します。

<script type='text/template' id='persons-template'>
    <div><%= name %></div>
</script>

<script type='text/javascript'>
    var persons: [
        { name: "some dude" },
        { name: "some other dude" }
    ];
</script>

ビュー自体は、Ajax呼び出しを使用してこのファイルをロードし、次のように解析を試みています。

var self = this;
$.get("persons.php").function(data) {
    self.template = _.template($(data).html());

    self.model = new PersonsCollection;

    // problem here: persons is undefined
    self.model.reset(persons);
    self.render();
});

したがって、は定義されていません。私は理由を知っています:スクリプトブロックがDOMに追加されていません。$(data)[1]を使用してHtmlScriptElementを取得できます; $($(data)[1])。text()を使用すると、Javascriptが次のような文字列として表示されます。

"var people:[{name:" some dude "}、{name:" some other dude "}];"

モデルに渡すことができるように 、 personsオブジェクトにアクセスするにはどうすればよいですか?

4

1 に答える 1

2

タイプまたはタイプのない返されたスクリプトを取得し、テンプレートを作成する前にDOMに詰め込みます。'text/javascript'

$.get("persons.php").function(data) {
    $(data)
        .find('script[type="text/javascript"], script[type!=""]')
        .appendTo('head');

  // proceed as before
});
于 2012-06-13T23:40:17.613 に答える