2012-07-08 70 views
1

我希望有人能解釋我在這裏做錯了什麼。我使用Ember.js與句柄模板,我已經嘗試了很多方式來獲得句柄#如果別人爲我工作,但它總是返回兩個內容的if和else ..這是我目前使用的代碼。Ember.js handlebars 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> 

這結束了示出的主體兩個視圖這一頁。任何建議表示讚賞,

感謝 史蒂夫

+0

我忘了補充視圖聲明在App.js: VAR homeView = Ember.View.create({ TEMPLATENAME: '家庭視圖', } ).appendTo( '#右'); var editAccountView = Ember.View.create({templateName:'edit-account', })。appendTo(#right); – SBignell 2012-07-08 17:54:46

+0

看看燼路由和插座幫手 – sabithpocker 2012-07-09 19:41:34

回答

5

你的問題的根本原因是Handlebars視圖助手({{view MyView}})需要一個Ember「class」的路徑參數,而不是一個類的實例。要創建視圖類,請使用Ember.Viewextend方法。 Handlebars視圖助手會實例化你的視圖類並將它附加到你的文檔中。

有關Ember對象模型的更多信息以及Ember的extendcreate方法之間的差異,請參閱此文章:http://ember-object-model.notlong.com

下面是您的示例,其中包含一些更正,用於更正上面提到的幾點。 http://jsfiddle.net/ethan_selzer/kcjzw/217/

問候,

+0

感謝您的迴應傢伙!確定使用Ethan的建議我可以看到它在IE/FF中有效,但由於某些奇怪的原因,輸出在chrome中是空的。無論如何,我仍然有問題,我想我錯過了一些簡單的..任何想法?這個例子只返回else語句,但在我看來模仿Ethan的建議.. jsfiddle.net/sbignell/tjQ9s – SBignell 2012-07-09 21:20:54

+0

其實我剛剛修復它..我沒有isHome功能非常正確,非常感謝Ethan你的解決方案,我也會看看文檔。 – SBignell 2012-07-10 08:58:58

+0

酷,我很高興你有它的工作。除[emberjs.com](http://emberjs.com)上的文檔外,[github wiki](https://github.com/emberjs/ember.js/wiki/Links)的鏈接頁面一些有用的文章和例子。 – 2012-07-10 12:26:58

1

那是因爲你手動appendTo附加兩種觀點(homeVieweditAccountView)。

此外,請避免在應用程序create()函數中定義視圖。因此,在您的應用:

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>