0

私が取り組んでいるプロジェクトで backbone.js を使い始めたところです。

現在、モデル、コレクション、ビューに関する限り、すべてを希望どおりに設定しています。サーバー上の REST アプリケーションからデータを取得しています。

クライアントはアプリにログインできます。現在、その情報を underscore.js テンプレートにフィードしていますが、テンプレートを動的にしたいと考えています。一部のオプションは、クライアントによって異なります。

テンプレートに特定の ajax 呼び出しを実行させて動的情報を取得させると、backbone.js を使用する目的が完全に無効になると私は感じています。バックボーンとアンダースコアが xhr リクエストからテンプレートをロードすることは可能ですか? または、これを行うためのさらに良い方法はありますか?

事前に助けてくれてありがとう。

4

1 に答える 1

2

Underscore に関する限り、テンプレートは単なる文字列であるため、その文字列はどこからでも取得できます。だからあなたはこれを行うことができます:

render: function() {
    var that = this;
    $.get('/some_template', function(tmpl) {
        that.$el.html(_.template(tmpl, that.model.toJSON()));
    });
    return this;
}

実際には、サーバーから特定のテンプレートを 1 回だけ取得する単純なキャッシュ オブジェクトの背後にそれを隠したいと思うでしょう。

または、サーバー コードに必要なテンプレートのセットを判断させ、それらを<script>要素に埋め込むことができます。

<script id="tmpl1" type="text/template">
    Some template code...
</script>
<script id="tmpl2" type="text/template">
    Some template code...
</script>
...

<script>テンプレートをsから引き出します。

render: function() {
    var tmpl = _.template($('#tmpl1').html());
    this.$el.html(tmpl(this.model.toJSON()));
    return this;
}

また、コンパイルされたテンプレート をtmplどこかにキャッシュするか、ビュー クラスを定義するときにコンパイルすることもできます (もちろん、DOM の準備が十分に整っていると仮定します)。

var V = Backbone.View.extend({
    template: _.template($('#tmpl1').html()),
    //...
    render: function() {
        this.$el.html(this.template(this.model.toJSON()));
        return this;
    }
});
于 2012-05-10T22:23:12.397 に答える