2015-03-02 19 views
9

Tôi có liên kết tới Người dùng được hiển thị từ nhiều màn hình khác nhau (Từ Danh sách Người dùng, Nhóm Người dùng, v.v.). Khi liên kết được nhấp, Người dùng được trình bày để chỉnh sửa. Khi nhấn nút hủy trong biểu mẫu chỉnh sửa, tôi muốn chuyển sang danh sách người dùng/nhóm màn hình trước đó. Làm thế nào là điều này thường đạt được trong Emberjs.Emberjs quay lại hủy

Cảm ơn, Murali

+0

Bạn có thể thiết lập một biến trong UserController có giá trị phụ thuộc vào nơi bạn đang đến từ các tuyến đường tài. Trong hành động được kết hợp với nút hủy, bạn có thể sử dụng giá trị của biến để quyết định tuyến đường nào cần chuyển đổi trở lại. Bạn có thể sử dụng transitionToRoute để quay lại tuyến cũ hơn. Điều này có nghĩa không? –

+0

Sẽ dễ dàng hơn nếu bạn có một JSFiddle với mã. –

+0

Cách tiếp cận của bạn có ý nghĩa. Tôi nghĩ rằng có thể có một cách dễ dàng hơn. Nó chỉ phải nhân rộng hành vi nút quay lại. Tôi không có một JSFiddle, tôi sẽ cố gắng tạo ra một – Murali

Trả lời

18

Bạn cần gì nhiều hơn

history.back() 

Một trong những thiết kế chính mục tiêu của Ember, và thực sự hầu hết các khuôn khổ OPA, là làm việc hài hòa với ngăn xếp lịch sử của trình duyệt để back "hoạt động".

Vì vậy, bạn không cần phải duy trì ngăn xếp lịch sử nhỏ của riêng bạn hoặc các biến toàn cầu hoặc móc chuyển đổi.

Bạn có thể đặt hành động back trong bộ định tuyến ứng dụng của mình để tác vụ sẽ phát ra từ mọi nơi, vì vậy bạn có thể chỉ cần nói {{action 'back'}} trong bất kỳ mẫu nào không có thêm quảng cáo.

+0

Cách tiếp cận mà tôi đề xuất cũng cảm thấy hơi nửa vời đối với tôi, vì vậy nếu phương pháp tiếp cận @torazaburo hoạt động - hãy cuộn với nó. :) – Kalman

+0

@Kalman Tôi đã nhìn thấy một số biến thể về cách tiếp cận của bạn, vì vậy bạn đang ở trong công ty tháng tám. Tuy nhiên, tôi chưa bao giờ nhìn thấy một trường hợp nó thực sự cần thiết, mặc dù các cuộc biểu tình của sản phẩm/tính năng mọi người mà họ "biết" người dùng "thực sự" muốn quay trở lại chỗ ma thuật A. Mặt khác, tôi có đã thấy nhiều hơn một trường hợp những schlobs nghèo kết thúc việc duy trì một cơ chế lịch sử cuộn nửa của riêng bạn cho đến khi họ thức dậy và bỏ cuộc. –

+0

'Back' hiện nó khá độc đáo. – Caltor

1

Có lẽ là một cách để khô (không lặp lại chính mình) này lên, nhưng một trong những cách để làm việc đó là phải có 2 hành động: willTransition mà Ember đã mang đến cho bạn và goBack mà bạn tự xác định. Sau đó, có một "toàn cầu" lastRoute biến mà bạn theo dõi như sau:

App.OneRoute = Ember.Route.extend({ 
    actions: { 
    willTransition: function(transition){ 
     this.controllerFor('application').set('lastRoute', 'one'); 
    }, 
    goBack: function(){ 
     var appController = this.controllerFor('application'); 
     this.transitionTo(appController.get('lastRoute')); 
    } 
    } 
}); 

Và mẫu của bạn sẽ trông như sau:

<script type="text/x-handlebars" id='one'> 
    <h2>One</h2> 
    <div><a href='#' {{ action 'goBack' }}>Back</a></div> 
</script> 

dụ làm việc here

2

Đây là giải pháp của tôi, rất đơn giản và hiệu suất cao.

// file:app/routers/application.js 
 
import Ember from 'ember'; 
 

 
export default Ember.Route.extend({ 
 
    transitionHistory: [], 
 
    transitioningToBack: false, 
 

 
    actions: { 
 
    // Note that an action, like 'back', may be called from any child! Like back below, for example. 
 

 
    willTransition: function(transition) { 
 
     if (!this.get('transitioningToBack')) { 
 
     this.get('transitionHistory').push(window.location.pathname); 
 
     } 
 
     this.set('transitioningToBack', false); 
 
    }, 
 
    
 
    back: function() { 
 
     var last = this.get('transitionHistory').pop(); 
 
     last = last ? last : '/dash'; 
 
     this.set('transitioningToBack', true); 
 
     this.transitionTo(last); 
 
    } 
 
    } 
 
});

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