2012-04-09 1 views
4

XTemplateのドキュメントでは、現在の配列インデックスを取得するために{#}を使用できます。Sencha touch 2:itemTplでアイテムインデックスを取得する

私はXlistののitemTplでそれを使用すると、私はいつもの代わりに、インデックスの1を取得:

{ 
     xtype: 'list', 
      store: 'myStore', 
      itemTpl:new Ext.XTemplate(
       '<tpl for=".">', 
         '<div>Item n°{#1}</div>', 
       '</tpl>' 
      ),   
    } 

はいつも私の店はいくつかの項目が含まれている場合でも、「アイテムのn°1」を生成します。

何か間違っていますか?

答えて

9

注を参照してください。そのため、{#}(xindexとも呼ばれます)は常に1を返します。

これは、ロードされたストアのアイテムのインデックスを手作業で設定することです(あなたのストアのリスナー)

listeners: { 
    load: function(store, records){ 
    store.each(function(record, index){ 
     record.set('index', index); 
    }, 
    store 
); 
} 

希望します。

+0

ありがとうございますが、ストアが動的に変更されたとき(アイテムの削除と挿入)に問題が発生しませんか? – borck

+0

これは、 'addrecords'、' removerecords'、 'updaterecords'または単に' refresh() 'イベントを通しても実行できます。 –

+0

私は別の方法を見つけました。なぜなら、これをupdaterecordsで行うと注意しなければならないので、あなたは無限の再帰で入力するでしょう... – borck

0

ここではレコード/アレイをループしていないので、これは「設計通り」です。テンプレートは、ストアの各要素に対して1回インスタンス化されます。

はまた、あなたがExt.data.Store、ないアレイ、そうのXTemplateプロセスを一度に1つだけのアイテムからデータをfetchs Ext.Listを使用しているhttp://www.sencha.com/forum/showthread.php?179728-Autonumber-in-Template-in-DataView

+0

おかげで... Xlistの中に番号付けを行う方法はありませんので、もし...奇妙なは... – borck

+0

'。したがって、配列_の_loopは正しく見えませんか? – Tjorriemorrie

2

私は同じ問題に走ったと私はこの思い付いた:私は店に余分なプロパティを追加するよりも、このソリューションを好む

itemTpl: [ 
      '<div class="item">' + 
       'Number {[this.getIndex()]}' + 
      '</div>', 
      { 
       getIndex: function() { 
        return document.getElementsByClassName('item').length + 1; 
       } 
      } 
     ] 

btwの場合、<tpl for="."></tpl>をitemTplに入れる必要はありません。暗黙的です。

0

私は同じ問題に遭遇しましたが、このスレッド&が良い解決策があるはずだと考えました。 は、DataViewののコードに見た後、私は以下のオーバーライドメソッドに気づいた:

prepareData: function(data, index, record) { 
    return data; 
} 

だから、インデックスがあり、あなたは少しだけオーバーライドを:)追加する必要があります。 私は、データオブジェクトにインデックスを追加し、オーバーライド目的で提供されているメソッドをオーバーライドする、この簡単なソリューションを好んでいます。配列である `data`と連携itemTpl`私の意見では

Ext.define('MyApp.overrides.dataview.DataView', { 
    override: 'Ext.dataview.DataView', 

    prepareData: function(data, index, record) { 
     if(Ext.isObject(data)) { 
      data.xindex = index + 1; 
     } 
     return data; 
    } 
}); 
関連する問題