我没有找到更容易的方法。这是我在我的应用程序中的操作方式(使用嵌套列表)。我用这样的路由创建了控制器:
Ext.define('MyApp.controller.ListItems', {
extend: 'Ext.app.Controller',
config: {
refs: {
nestedList: '.nestedlist'
},
control: {
nestedList: {
itemtap: 'itemSelected'
}
},
routes: {
'item/:id': 'showListItem'
}
},
list: null,
index: null,
target: null,
record: null,
showListItem: function( id ){
var nestedList = this.getNestedList(),
store = nestedList.getStore(),
node = store.getById(id);
if ( node.isLeaf() ){
nestedList.goToLeaf(node);
nestedList.fireEvent('leafitemtap', nestedList, this.list, this.index, this.target, this.record);
} else {
nestedList.goToNode(node);
}
},
itemSelected: function( nl, list, index, target, record ){
this.list = list;
this.index = index;
this.target = target;
this.record = record;
var path = 'item/'+record.data.id;
this.redirectTo(path);
}
});
我还重写了嵌套列表的 onItemTap 方法,现在所有列表更改都是通过控制器和 propper 路由完成的。
onItemTap: function(list, index, target, record, e){
this.fireEvent('itemtap', this, list, index, target, record, e);
}
希望它会有所帮助。写在这里,如果你找到更好的方法,请。