2013-02-26 28 views
14

Tôi có một bộ định tuyến được thiết lập với tài khoản và các tùy chọn account /: account_id. Khi người dùng truy cập vào trang chỉ mục của ứng dụng của tôi, tôi chuyển họ sang tuyến tài khoản.Ember.js: transitionTo route, sau đó đến phân đoạn động

Social.Router.map(function() { 
    this.resource('accounts', function(){ 
     this.resource('account', { path: ':account_id'}); 
    }); 
}); 

Social.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('accounts'); 
    } 
}); 

Điều tôi muốn làm là chuyển đổi chúng sang một quy tắc cụ thể: account_id dựa trên một số tiêu chí. Tại thời điểm này tôi chỉ muốn có được tài khoản đầu tiên trong mảng và sử dụng nó. Nhưng trong tương lai nó có thể là một cách để chuyển đổi chúng sang tài khoản cuối cùng mà họ đang xem. Một cái gì đó như thế này:

Social.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('accounts/:account_id'); 
    } 
}); 

Các tài liệu cung cấp cho "chi tiết" nhưng không cung cấp một ví dụ, chỉ đưa ra sau đây:

transitionTo (name, models)

Transition into another route. Optionally supply a model for the route in question. The model will be serialized into the URL using the serialize hook.

Tôi đã thử những điều sau đây:

this.transitionTo('accounts/4'); 
Uncaught Error: assertion failed: The route accounts/4 was not found 

this.transitionTo('accounts', Social.Account.find(1)); 
Uncaught More objects were passed than dynamic segments 

Trả lời

13

Tôi đặt cùng câu trả lời của người khác và một số không quan trọng và xuất hiện với câu trả lời này:

xác định các tuyến đường của bạn như:

this.resource('accounts', function() { 
    this.route('account', {path: '/:account_id'}); 
}); 

chuyển hướng:

this.transitionTo('accounts.account', accountObj); 

Nhưng nếu bạn đang tải từ máy chủ, bạn cần tải đối tượng accountObj b efore chuyển hướng:

var accountObj = App.Account.find(1); 
accountObj.one('didLoad', this, function() { 
    this.transitionTo('accounts.account', accountObj); 
}); 

tôi thiết lập this fiddle với hoàn dụ

+0

Fiddle của bạn dường như không hoạt động vì vậy tôi đã cập nhật nó với các cuộc gọi từ CDNjs.com: http://jsfiddle.net/XNyme/9/ – commadelimited

2

Dường như transitionTo không còn được ưu tiên với transitionToRoute.

Tuy nhiên, bạn có thể đạt được định tuyến lại bằng cách khai báo ban đầu là this.resource('account', { path: '/:account_id'}); và sau đó quá trình chuyển đổi với đối tượng được tạo duy nhất sẽ hoạt động.

2

Bạn không chỉ định đường dẫn tuyến đường chính xác và bạn nên có tuyến đường bên dưới tài nguyên chứ không phải tài nguyên khác. Cần phải như sau:

Social.Router.map(function() { 
    this.resource('accounts', function(){ 
     this.route('account', { path: '/:account_id'}); 
    }); 
}); 

Social.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('accounts.account', Social.Account.find(1)); 
    } 
}); 
+0

Được rồi.Việc triển khai mã này giúp tôi có hai thứ. 1) URL thay đổi như mong đợi. 2) Tôi nhận được một lỗi giao diện điều khiển của 'Lỗi không bắt buộc: xác nhận không thành công: Tài khoản tuyến đường không được tìm thấy'. Khi tôi truy cập vào '/', URL thay đổi thành '/ #/accounts/1', đó là những gì tôi mong đợi, nhưng không có gì tải và lỗi giao diện điều khiển xuất hiện. – commadelimited

+0

Tôi quên thêm đường dẫn vào tài nguyên tài khoản gốc. – buuda

0

Vì /: account_id là tài nguyên bạn cần phải chuyển đổiĐối với tài khoản 'Chuyển tiếp'. Bạn cũng cần một AccountRoute cho phù hợp.

Nếu /: account_id là một tuyến đường không phải là tài nguyên bạn sẽ chuyển đổiĐối với 'tài khoản' tài khoản.account 'và trình xử lý tuyến đường của bạn sẽ được gọi là AccountsAccountRoute.

1

Với mới nhất Ember (1.0.0-RC-6), công trình này một cách hoàn hảo.

Router:

this.resource('accounts', function() { 
    this.resource('account', {path: '/:account_id'}); 
}); 

Để chuyển hướng:

this.transitionToRoute('account', Social.Account.find(1)) 
+0

Nó chỉ hoạt động với ember 1.1.3 + pre.e0ffbf84. Cảm ơn. – hiroshi

Các vấn đề liên quan