1

我希望有人能解释我在这里做错了什么。我正在使用带有把手模板的 Ember.js,我尝试了多种方法来让把手 #if else 为我工作,但它总是返回 if 和 else 的内容。这是我目前正在使用的代码。

应用程序.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 视图助手将实例化您的视图类并将其附加到文档中。

extend有关 Ember 对象模型以及 Ember和create方法 之间差异的更多信息,请参阅这篇文章:http: //ember-object-model.notlong.com

这是您的示例,其中进行了一些更改以纠正我上面提出的观点。http://jsfiddle.net/ethan_selzer/kcjzw/217/

问候,

伊森

于 2012-07-08T23:13:59.187 回答
2

那是因为您要手动附加两个视图(homeView和) 。editAccountViewappendTo

此外,避免在 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 回答