6

Tôi sử dụng NavigationView làm bảng điều khiển gốc. Và điều tôi cố gắng thực hiện là đẩy các khung nhìn vào bảng điều khiển gốc khi người dùng điều hướng sâu hơn vào ứng dụng của tôi và bật chúng khi người dùng quay lại.Cách sử dụng Sencha NavigationView, liên kết sâu và lịch sử trình duyệt đúng cách

Dưới đây là một ví dụ đơn giản cho thấy sự cố của tôi: Tôi có một loại chế độ xem hiển thị một số chi tiết mục nhập.

Ext.define('MyApp.view.EntryDetails', { 
    extend: 'Ext.Panel', 
    xtype: 'entrydetails', 

    config: { 
     tpl: '<div>{id}</div>' 
    } 
}); 

Tôi cũng có một bộ điều khiển cấu hình để lắng nghe các tuyến đường sau: "entry /: id", và đẩy một entrydetails mới xem vào navigationstack (NavigationView) khi tuyến đường này trận đấu.

Ext.define('MyApp.controller.EntryDetails', { 
    extend: 'Ext.app.Controller', 
    config: { 
     routes: { 
      'entry/:id': 'showEntry' 
     }, 
     refs: { 
      navview: 'mynavigationview' 
     }, 
    }, 

    showEntry: function(id){ 
     this.getMain().push({ 
      xtype: 'entrydetails', 
      data: {id:id} 
     }); 
    } 
}); 

Được rồi, điều này có hiệu quả. Bây giờ cho phép đầu tiên giả sử tôi điều hướng đến: index.html # entry/1. Điều này sẽ đẩy một cái nhìn mới vào ngăn xếp, giống như tôi muốn. Sau đó, tôi nhấp vào một liên kết khác index.html # entry/2. Một chế độ xem khác được đẩy lên ngăn xếp, đây cũng là hành vi dự định. Bây giờ vấn đề xuất hiện khi tôi nhấp vào nút BROWSERS back. Điều này thay đổi url thành index.html # entry/1 và đẩy một chế độ xem khác vào ngăn xếp của tôi. Tôi muốn bật chế độ xem thay vì thêm chế độ xem khác. Nếu tôi nhấn các thanh công cụ, nút quay lại sẽ xuất hiện như tôi muốn, nhưng đây không phải là trường hợp với nút quay lại của trình duyệt.

Tôi hiểu tại sao điều này xảy ra: Khung cảm ứng Sencha không biết liệu thay đổi url là do tôi nhấn một liên kết khác có url giống với url lịch sử trình duyệt trước đó hay tôi đã nhấn nút quay lại trình duyệt của tôi. Và tất cả các mã của tôi biết là nên đẩy một cái nhìn khác vào ngăn xếp khi nó thấy một thay đổi url để "entry /: id".

Cách tốt nhất để giải quyết vấn đề này là gì. Làm cách nào để phát hiện nút quay lại của trình duyệt đã được nhấn và bật chế độ xem từ chế độ xem điều hướng của tôi.

Tôi đã nghĩ đến việc kiểm tra xem url đã thay đổi có tương tự với chế độ xem tiếp tục xuống trên ngăn điều hướng của tôi hay không, nhưng tôi không chắc đó có phải là cách để thực hiện hay không.

Bất kỳ trợ giúp/thảo luận nào về chủ đề đều được đánh giá cao!

Trả lời

2

Tôi gặp sự cố tương tự với thành phần NestedList. Những gì tôi đã làm là ghi đè onBackTap, hủy bỏ nó, và sau đó chuyển hướng đến URL thích hợp. Tôi đoán có một số cách để áp dụng kỹ thuật này vào NavigationView là tốt. Tôi không biết đây có phải là cách đúng đắn để làm điều đó không, nhưng đó là cách duy nhất tôi có thể lấy lại các nút phần cứng và phần mềm để chơi cùng nhau.

+0

Cảm ơn bạn đã trả lời của bạn. Điều này dường như là con đường để đi. – jorgenfb

1

Bạn có thể thêm những dòng này để chuyển hướng nhìn definiton của bạn,

initialize: function() { 
    this.getNavigationBar().on({ 
     back: this.onBackButtonTap, 
     scope: this 
    }); 
}, 
onBackButtonTap: function() { 
    this.pop(); 
    this.fireEvent('back', this); 
    history.back(); 
} 
Các vấn đề liên quan