2013-02-16 32 views
0

我試着在個人項目上燼js。我正在努力理解哪些部分扮演Ember的不同組成部分。我很熟悉Rails,並且我已經在一定程度上使用了骨幹(從來沒有使用與路由相關的所有東西),並且弄清楚它們兩個是如何工作的,以及哪些對象扮演着MVC的哪一部分。從軌道和骨架到灰燼

隨着灰燼,事情並不那麼清楚,似乎不那麼容易。我已經閱讀了指南和幾篇文章,但我還在努力前進。我得到的模型部分與軌道和主幹部分非常相似。我得到了模板,把手,那些東西。路由器類似於路由器。

然後是控制器,路由和視圖。根據我的理解,視圖代表了ui的一部分,並處理用戶交互。這是控制器/路線角色,我沒有得到太多。

更具體一點:我希望我的應用有一個導航欄(帶有指向頁面部分的鏈接)和一個「用戶連接小部件」,如果他連接,則顯示用戶數據,如果不是,則允許他這樣做,在通過Facebook等

navbar似乎適合一個視圖,但我需要保持狀態(突出顯示當前頁),這似乎是控制器的角色。用戶小部件似乎適用於控制器,但每個路由只有一個控制器,所以如何執行此操作?

非常感謝您的時間,我希望我已經夠清楚了!

:)

回答

1

控制器存儲您的應用程序的狀態。路由器管理您應用程序的不同狀態。你是對的,每個路由只有一個控制器,但你也可以訪問其他控制器。

假設這是你的HTML:

<script type="text/x-handlebars" data-template-name="application"> 
    <div class="main-content"> 
    {{outlet}} 
    </div> 
</script> 

<script type="text/x-handlebars" data-template-name="index"> 
    <div class="nav-bar"> 
    <div class="user"> 
     {{#if isLoggedIn}} 
     <div class="user-name">{{userName}}</div> 
     {{else}} 
     <button {{action "login" target="App.UserController"}}> 
      Login 
     </button> 
     {{/if}} 
    </div> 
    </div> 
    <div class="content">some other amazing content here</div> 
</script> 

和JS:

var App = Ember.Application.create({ 
    LOG_TRANSITIONS: true, 
    rootElement: '#ember-app' 
}); 

App.Router.map(function() { 
    this.route('user'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
    this.controller.set('isLoggedIn', this.controllerFor('user').get('isLoggedIn')); 
    } 
}); 

App.UserController = Ember.ObjectController.extend({ 
    isLoggedIn: false, 
    userName: 'emberjs', 
    login: function() { 
    this.set('isLoggedIn', true); 
    } 
}); 

App.NavbarView = Ember.View.create({ 
    loggedInBinding: Ember.Binding.oneWay('App.UserController.isLoggedIn') 
}); 

如果您需要從您的路徑訪問另一個控制器,你可以這樣做:

App.IndexRoute = Ember.Route.extend(function() { 
    setupController: function() { 
    var userController = this.controllerFor('user'); 
    console.log('this is a user controller instance', userController); 
    } 
});