2013-06-24 22 views
0

我想創建一個控制器,引用List中的特定項目,這可能嗎?特定listitem的ComponentQuery

所以我真的需要ComponentQuery來引用listitem。在我的控制器上

Ext.define('MyApp.view.MyView', { 
    extend : 'Ext.List', 
    alias : 'widget.mylist', 

    config : { 
     title : 'Title', 

     itemTpl : ['{displayName}'].join(''), 

     data : [{ 
      displayName : 'One', 
      id : 1 
     }, { 
      displayName : 'Two', 
      id : 2 
     }, { 
      displayName : 'Three', 
      id : 3 
     }, { 
      displayName : 'Four', 
      id : 4 
     }] 
    } 
}); 

然後(這顯然不工作):我設置了數據內嵌在列表中

refs : { 
    oneListItem: 'mylist.list[id=1]', 
    twoListItem: 'mylist.list[id=2]', 
    threeListItem: 'mylist.list[id=3]', 
    fourListItem: 'mylist.list[id=4]' 
} 

希望這是可能的。如果不是,我可以在列表上聽一個'itemtap'並從那裏調用一個方法,但是,我寧願不必爲了清潔而做這些。

在此先感謝。

布拉德

回答

1

首先:將id添加到您的數據部分中的對象不會產生任何影響,那就是您在之前指定的itemTpl中取得的數據。

至於你的問題:煎茶觸摸2文檔沒有提及辦法有Ext.ComponentQuery選擇Component的第n個孩子,所以,假設你想創建列表內聯數據,我看到的唯一途徑對象是使用Sencha在創建時自動應用於每個listItem的id

這些ID是#ext-listitem-1類型,請參閱如何在此Sencha Fiddle demo中使用它們的示例。

然而,這是不好的做法,因爲你不能依賴這些id,例如,如果你添加另一個列表到你的應用程序,他們可以改變破壞你的代碼。

我看不出有任何有效的理由,爲什麼你不應該使用itemtap行動的名單上,因爲與事件中,你得到的所有數據,你需要操作的列表項目:

itemtap(this, index, target, record, e, eOpts) 

對於爲了完整起見,我必須提到,您還可以使用Ext.dataview.List.add()動態添加項目,這樣您就可以使用自定義的id創建dataitems

+0

你100%正確,我沒有問過希望得到一個黑客或非標準的解決方案。我只是希望我在文檔中遺漏了一些東西。 謝謝你的完整答案。 – bwags

0

,如果你想在第一或最後一個項目一個手柄,您可以嘗試Ext.select('.x-list-item-first');Ext.select('.x-list-item-last');。我鼓勵你添加一個xtype設置爲「mylist」而不是使用別名。

+0

我會嘗試,當我回到辦公室,看起來很有前途。關於使用xtypes代替別名...我相信你,但我不明白爲什麼。是否有任何文件可以指向我?謝謝! – bwags

+0

我不明白這是如何工作的:'mylist> .list-item-1'選擇xtype'mylist'的所有xtype爲'.list-item-1'的孩子。 'Ext.dataview.component.ListItemView'的xtype只是'listitem' isnt'it? –

+0

這就是我所指的CSS選擇器(但對於Sencha Touch來說它不同)。你可以這樣做:Ext.select('。x-list-item-first'),假設你想要第一個項目。 – occasl