2

こちらのリンクを参考にアコーディオンリストを実装しました。http://docs.kawanoshinobu.com/touch/#!/api/Ext.ux.AccordionList . アコーディオンは問題なく正常に動作しています。アコーディオン リストのヘッダーでのみテキストを検索する必要があります。検索後、アコーディオン ヘッダーを取得した場合は 1 回。ヘッダーの子アイテムを表示する必要があるヘッダーを展開および折りたたむことができるはずです。ストア フィルターを適用しました。フィルターされたストアであり、フィルターされたデータが表示されます (画像参照)。ヘッダーの右側で展開と折りたたみが行われ、下のアイコンが変化しています。ただし、展開モードで特定のヘッダーの子ノード データを表示できません。そのヘッダーの子ノードが利用可能です (console.log() に表示されます)。アコーディオン リスト/ツリー ストアにフィルターを適用する他の方法はありますか? 感謝します。ありがとうございました。上記のリンク自体で、ストアフィルターを適用しました。これは、コードで問題に直面しているものと同じ動作です。以下のコードでは、フィルター テキスト 'to' を渡します。今日はフィルタリングされています。とてもいいです。ただし、子ノードの展開をクリックすると表示されません。

店舗フィルター前 保存後フィルター コードはここにあります:

var data = {
    "items" : [{
          "text" : "Today",
          "items" : [{
                      "text" : "Eat",
                      "leaf" : true
                  }, {
                      "text" : "Sleep",
                      "leaf" : true
                  }, {
                      "text" : "Drinking",
                      "leaf" : true
                  }]
      }, {
          "text" : "Tomorrow",
          "items" : [{
                      "text" : "Watch TV",
                      "leaf" : true
                  }, {
                      "text" : "Watch Video",
                      "leaf" : true
                  }]
      }, {
          "text" : "This week",
          "items" : [{
                      "text" : "Shopping",
                      "leaf" : true
                  }]
      }, {
          "text" : "Later",
          "items" : [{
                      "text" : "Eat",
                      "leaf" : true
                  }, {
                      "text" : "Sleep",
                      "leaf" : true
                  }, {
                      "text" : "Drinking",
                      "leaf" : true
                  }]
      }]
 };

 Ext.define('Task', {
     extend: 'Ext.data.Model',
     config: {
         fields: [{
             name: 'text',
             type: 'string'
         }]
     }
 });

 var store = Ext.create('Ext.data.TreeStore', {
     model: 'Task',
     defaultRootProperty: 'items',
     root: data
 });    


store.filter([{
                    property: "text",
                    value: "to",
                    anyMatch: true               
                }]);


 var accordionList = Ext.create('Ext.ux.AccordionList', {
     fullscreen: true,
     store: store
 });
4

1 に答える 1

-1

達成しました。store.filter 関数、テキストを適切にフィルタリングしますが、子ノードもある場合は表示されません。ストアで特定のテキストを検索したためです。after filter は、それらのフィルター テキストのみを表示します。私は別の道を歩んできました。それは私の要件に従って非常にうまく機能しています。Web サービス store.load() を呼び出しています。入力されたテキストをストアで検索します。入力されたテキストが親レベルで利用できない場合、その特定のアイテムがストアから削除されます。繰り返しの後、アコーディオン リストに割り当てられる最終ストア。アコーディオン リストには、関連する検索テキスト データが表示されます。乾杯 :)。以下はコードです。ありがとうございました。

store.getProxy().setUrl('resources/Json/TestsStore.json');           
            store.load({
                scope: this,
                callback: function(records, operation, success) {
                    if (success) {
                            if(searchfield !=="") {                                
                                if(store.data.items.length !==0){
                                    var length = store.data.items.length;
                                    for(var j=length; j--;) {
                                    if(store.data.items[j].data.name.search(new RegExp(searchfield, "i")) ===-1){
                                        store.data.items[j].remove();
                                    }
                                }
                              }
                            }
                        if(store.data.items.length ===0){
                            eGMonitorApp.util.Utility.showAlert('Searched text not available.','Tests');
                        }                       
                        this.getAccordionListRef().setStore(store);
                    }
                }
            });
于 2013-08-14T07:45:14.217 に答える