1

変数内にビューの名前があるので、ハンドルバーヘルパーを使用してレンダリングします。

だから、私は次のようなオブジェクトを持っています(もちろんすべて簡略化されています)

config = Ember.Object.create({ view: "MyTplView"}) ;

次に、次のテンプレートがあります

<script type="text/x-handlebars" data-template-name="index">
    <div id="container">
        {{helperViewRenderer config}}
    </div>
</script>

そしてハンドルバーヘルパー

Ember.Handlebars.registerBoundHelper('helperViewRenderer', function(value, options) {
    var template = App[value.view].create() ;
    template.appendTo("#container") ;
}) ;

問題は、その時点では存在しないID「container」の要素にテンプレートを挿入しようとしていることです。これを修正する可能性は何ですか。たとえば、テンプレートからHTML文字列を取得して、代わりにこれを返すことは可能ですか?

4

2 に答える 2

2

グローバルとしてではなく、親ビュー クラスの内部で子ビュー クラスを定義することの価値を時折発見しました。任意のパス (グローバルまたはローカル) をviewヘルパーに渡すことができview、現在のコンテキストで現在のビューを使用できます。したがって、

App.ParentView = Ember.View.extend({
  template: Ember.Handlebars.compile("The parent's child: {{view view.ChildView}}."),

  ChildView: Ember.View.extend({
    template: Ember.Handlebars.compile("-- child view --")
  })
});
于 2013-02-17T03:48:19.813 に答える
1

Emberは、新しいルーターを使用して「アウトレット」を作成するルートをたどろうとします。

メソッドを使用したい場合はappendTo、テンプレートを既存の HTML 要素に追加する必要があります。このように、テンプレートから HTML 文字列を取得することはできません (それが親テンプレートの一部であることがわかっている場合を除きます)。ただし、テンプレートをどこに挿入するかあまり気にしない場合はappend、本文の最後にテンプレートを追加するストレートを使用できます。

あなたの場合、同じメイン テンプレート内で異なるテンプレートをレンダリングしたいと考えているように見えるので、ルーターに慣れる方がよいと思います。したがって、URL を変数として使用し、関連するビューをアウトレットに挿入することで、これらを簡単に分離できます。

App.Router.map(function () {
  this.route("index", { path: "/" });
  this.route("first", { path: "/view1" });
  this.route("another", { path: "/view2" });
});

App.FirstRoute = Em.Route.extend({
  renderTemplate: function () {
    this.render('view1', { outlet: 'main' });
  }
});

App.AnotherRoute = Em.Route.extend({
  renderTemplate: function () {
    this.render('view2', { outlet: 'main' });
  }
});

意見:

<script type="text/x-handlebars" data-template-name="index">
    <div id="container">
        {{outlet main}}
    </div>
</script>

この方法では、変数を渡すハンドルバー ヘルパーは必要なく、すべてが Ember 規則にきちんとまとめられています。

于 2013-02-14T21:19:24.713 に答える