2012-06-22 20 views
6

Tôi chắc chắn điều này sẽ trở nên rõ ràng khi tôi đào sâu hơn, nhưng bây giờ không rõ ràng cách thực hiện điều này.Định tuyến Ember.js: làm cách nào để bạn đặt tuyến đường mặc định để hiển thị ngay lập tức?

Tôi đã theo dõi thông tin trên this helpful SO article about routing nhưng có một phần quan trọng bị thiếu trong ví dụ, tức là làm cách nào để hiển thị chế độ xem 'trang chủ' ngay lập tức mà không phải nhấp vào liên kết 'nhà riêng'?

Tôi đã bắt đầu đào sâu vào tài liệu để cố gắng hiểu rõ điều này, nhưng trong khi đó, nó có vẻ như một câu hỏi hữu ích để trả lời cho hậu thế.

Tôi đã chơi với ví dụ jsfiddle làm việc kể từ câu hỏi trên here và so sánh với ví dụ khác này, tôi phát hiện ra rằng seems to have the default routing working

Cho đến nay nó vẫn còn là một bí ẩn.

hiện tại đang:

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.State.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.State.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.State.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet('home'); 
     } 
    }), 

    // STATES 
    profile: Em.State.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

UPDATE: Giải pháp

Nó chỉ ra rằng lý do ví dụ tôi đã làm việc với không hoạt động là vì nó được sử dụng Em.State.extend thay hơn Em.Route.extend. Phần thú vị là khi tôi bước qua và thay đổi từng cái một thì ví dụ này không hiệu quả cho đến khi tôi thay đổi tất cả chúng.

Đây là làm việc example:

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.Route.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.Route.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.Route.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet({name: 'home'}); 
     } 
    }), 

    // STATES 
    profile: Em.Route.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

Trả lời

3

U có thể làm cho một chuyển hướng từ các chỉ số để các tuyến đường về nhà. Ví dụ làm việc: http://jsfiddle.net/FRfBt/

+1

Cảm ơn các ví dụ làm việc. Phải mất một thời gian để tìm ra sự khác biệt là gì từ ví dụ của tôi ở trên nhưng cuối cùng tôi đã tìm ra nó. Ví dụ tôi đã không làm việc vì nó đã sử dụng 'Em.State.extend' thay vì' Em.Route.extend' – radixhound

9

Dường như việc này được thực hiện khác biệt ngay bây giờ. Tôi đã thành công với cách này để làm việc đó:

App = Ember.Application.create(); 

App.Router.map(function() { 
    // 'index' route is default 
    this.resource('dashboard'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     // this redirects/to /dashboard 
     this.transitionTo('dashboard'); 
    } 
}); 

App.DashboardRoute = Ember.Route.extend({ 
}); 
6

Với Ember CLI, bạn có thể đặt chuyển hướng trong index.js trong thư mục gốc của bạn của các tuyến đường thư mục:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    redirect: function() { 
    this.transitionTo('dashboard'); 
    } 
});