1

ここで私が間違っていることを誰かが説明してくれることを願っています。私はハンドルバー テンプレートで Ember.js を使用しています。ハンドルバー #if else を取得する方法をいくつか試しましたが、常に if と else の両方の内容を返します。現在使用しているコードは次のとおりです。

App.js:

App = Ember.Application.create({
  selectedView: "Home",
  IsHome: function() {
    this.get('selectedView') === 'Home'
}.property('selectedView')

});

index.html ヘッドには以下が含まれます。

<script type="text/x-handlebars" data-template-name="home-view">
      Hello, This is the home view.
</script>
<script type="text/x-handlebars" data-template-name="edit-account">
      Hello, This is the account edit view.
</script>

そして体内で:

<script type="text/x-handlebars">
{{#if App.IsHome}}
   {{view HomeView}}
{{else}}
  {{view editAccountView}}
{{/if}}
</script>

これにより、ページの本文に両方のビューが表示されます。どんなアドバイスでも大歓迎です、

ありがとうスティーブ

4

2 に答える 2

5

問題の根本的な理由は、Handlebars ビュー ヘルパー ( {{view MyView}} ) が、クラスのインスタンスではなく、Ember の「クラス」へのパス パラメーターを想定していることです。ビュー クラスを作成するには、 のextendメソッドを使用しEmber.Viewます。Handlebars ビュー ヘルパーは、ビュー クラスをインスタンス化し、それをドキュメントに追加します。

extendEmber オブジェクト モデルの詳細と、Emberとcreateメソッド の違いについては、次の投稿を参照してください: http://ember-object-model.notlong.com

上記の点を修正するためにいくつかの変更を加えた例を次に示します。http://jsfiddle.net/ethan_selzer/kcjzw/217/

よろしく、

イーサン

于 2012-07-08T23:13:59.187 に答える
2

これは、両方のビュー (homeVieweditAccountView) を で手動で追加しているためですappendTo

また、Appcreate()関数内でビューを定義することは避けてください。したがって、アプリを作成します。

App = Ember.Application.create({
  ready: function() {
    App.MainView.create().append();
  }
});

App.MainViewによって定義されたトップレベルのビューはどこにありますか:

App.MainView = Ember.View.extend({
  templateName: 'main-view',

  selectedView: "Home",
  isHome: function() {
    this.get('selectedView') === 'Home'
  },

  homeView: Ember.View.extend({ 
    templateName: 'home-view'
  }),

  editAccountView: Ember.View.extend({ 
    templateName: 'edit-account'
  })
});

ハンドルバー テンプレートを使用:

<script type="text/x-handlebars" data-template-name="main-view">
  {{#if view.isHome}}
     {{view view.homeView}}
  {{else}}
    {{view view.editAccountView}}
  {{/if}}
</script>
于 2012-07-08T20:32:41.280 に答える