2

サーバーから ember テンプレートをアップロードしたい。私はその必要性のために次のように使用されているのを見ました:

$.ajax({
    url: 'url_to_template_text',
    dataType: 'text',
    success: function (resp) {
        App.AboutView = Ember.View.extend({
            template: Ember.Handlebars.compile(resp)
        });   
    }
});

しかし、このビューをページにレンダリングする方法を理解できません。App.AboutView.append() - 機能していません

そのビューのルーティングを追加すると、テンプレートを取得してレンダリングする時間がありません。

<script type="text/x-handlebars" >
   {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="about">
    That text cant be show
</script>

//////JS

$.ajax({
    url: 'url_to_template_text',
    dataType: 'text',
    success: function (resp) {

        App.AboutView = Ember.View.extend({
            templateName: 'about',
            template: Ember.Handlebars.compile(resp)
        });

    }
});


App.Router.map(function() {
    this.route("about", { path: "/" });   
});

うまくいきませんでした。最も古いテンプレート コンテンツをレンダリングしています (つまり、「そのテキストは表示できません」)

私を助けてください、おそらく私は悪い方法を使いましたか?

4

1 に答える 1

3

フックを使用して、beforeModelフックと一緒にテンプレートをロードできますmodel。この場合、ルートのデフォルト ビューとして解決するためにも使用する必要があるようです。Ember の規則、AboutRoute -> AboutView -> AboutController などを使用してこれを行うことができます。

beforeModel: function() {
  return $.ajax({
    url: '/about.hbs'
  })
  .then(function(response) {
    Em.TEMPLATES.about = Em.Handlebars.compile(response);
  });
},

Ember.TEMPLATESテンプレートをロードしたら、それをグローバルオブジェクトに割り当てる必要があります。

別のアプローチは、ビューのテンプレートに対して同じことを行うことです。ビューのクラスを再度開き、ロードしたテンプレートを上記のように追加します。でハンドルバー テンプレート内のビューを使用する必要があることに注意してください{{view App.MyView}}

jsbinの例を次に示します。

于 2013-07-23T04:05:34.733 に答える