来自两个Sencha Touch导航视图中相同列表的事件

时间:2013-03-23 21:35:59

标签: sencha-touch

我有一个清单:

Ext.define('my.view.ProgramList', {
  extend: 'Ext.dataview.List',
  xtype: 'programlist',
  ...
}

我希望这个列表成为两个导航视图的起点:

Ext.define("my.view.ProgramNavigationView", {
  extend: 'Ext.navigation.View',
  xtype: 'programnavigationview',
  ...
  items: [{
    xtype: 'programlist',
    itemId: 'programlist'
  }]
}

Ext.define("my.view.FacebookNavigationView", {
  extend: 'Ext.navigation.View',
  xtype: 'facebooknavigationview',
  ...
  items: [{
    xtype: 'programlist',
    itemId: 'programlist'
  }]
}

问题:如何处理控制器中的点击事件并单独处理这两个事件?在我的控制器中,我有:

refs: {
    programlist: 'programlist',
    facebooknavigationview: 'facebooknavigationview',
    programnavigationview: 'programnavigationview', ...
},

我试过这个:

control: {
  programlist: {
    initialize: 'initProgramData'
  },
  facebooknavigationview: {
    itemtap: 'showFacebookGroup'
  },
  programnavigationview: {
    itemtap: 'showProgramData'
  },

希望itemtap能够冒出来,我可以在facebooknavigationview和programnavigationview中以不同方式处理,但事实并非如此。我可以把itemtap放在程序列表中然后触发,但是后来我无法区分两个导航视图;我不知道我是否可以搜索层次结构,但这看起来有点......丑陋。我错过了什么?

1 个答案:

答案 0 :(得分:1)

您可以添加使用父级的参考号来帮助区分点按来源的位置,例如,如果您有以下观点:

Ext.define("my.view.ProgramNavigationView", {
  extend: 'Ext.navigation.View',
  xtype: 'programnavigationview',
  ...
  items: [{
    xtype: 'programlist',
    itemId: 'programlist'
  }]
}

Ext.define("my.view.FacebookNavigationView", {
  extend: 'Ext.navigation.View',
  xtype: 'facebooknavigationview',
  ...
  items: [{
    xtype: 'programlist',
    itemId: 'programlist'
  }]
}

您可以使用以下参考:

refs: {
    programlist: 'programlist',
    facebooknavigationview: 'facebooknavigationview programlist',
    programnavigationview: 'programnavigationview programlist', ...
},
control: {
  programlist: {
    initialize: 'initProgramData'
  },
  facebooknavigationview: {
    itemtap: 'showFacebookGroup'
  },
  programnavigationview: {
    itemtap: 'showProgramData'
  },

现在,当项目点击显示在父视图中时,它们正在侦听。