ExtJS: dataview itemSelector pointing to child element

前端 未结 1 1908
抹茶落季
抹茶落季 2021-01-15 02:39

I want to use dataview to render the following hierarchy data:

[{
  id: 1,
  name: \'Parent #1\',
  children: [ { id: 11, name: \'Child 1.1\' }, { id: 12, na         


        
1条回答
  •  礼貌的吻别
    2021-01-15 02:50

    It is possible after extending DataView a bit.

    Example code:

    Ext.create('Ext.Panel', {
        id: 'images-view',
        frame: true,
        collapsible: true,
        width: 535,
        renderTo: 'dataview-example',
        title: 'Simple DataView (0 items selected)',
        items: Ext.create('Ext.view.View', {
            store: store,
            tpl: new Ext.XTemplate( 
                '',
                    '
    {name}
    ', '', '
    {name}
    ', '
    ', '
    ' ), multiSelect: true, height: 310, trackOver: true, overItemCls: 'x-item-over', itemSelector: '.x-item', emptyText: 'No images to display', onItemSelect: function(record) { var node = this._selectedNode; //this.getNode(record); if (node) { Ext.fly(node).addCls(this.selectedItemCls); } }, onItemDeselect: function(record) { var node = this._deselectedNode; //this.getNode(record); if (node) { Ext.fly(node).removeCls(this.selectedItemCls); } }, processItemEvent: function(record, item, index, e) { if (e.type == "mousedown" && e.button == 0) { this._deselectedNode = this._selectedNode; this._selectedNode = item; console.log(item.innerHTML); } }, updateIndexes : function(startIndex, endIndex) { var ns = this.all.elements, records = this.store.getRange(), i, j; startIndex = startIndex || 0; endIndex = endIndex || ((endIndex === 0) ? 0 : (ns.length - 1)); for(i = startIndex, j = startIndex - 1; i <= endIndex; i++){ if (!Ext.fly(ns[i]).is('.x-item-child')) { j++; } ns[i].viewIndex = i; ns[i].viewRecordId = records[j].internalId; if (!ns[i].boundView) { ns[i].boundView = this.id; } } } }) });

    Working sample: http://jsfiddle.net/fU9De/

    But it's easy to achieve without modifying DataView by only changing data layout in that way children are separated records. For example:

    [
        {
            id: 1,
            name: 'Parent #1',
            children: [ 11, 12 ]
        },
        { id: 11, name: 'Child 1.1', parentId: 1 }, 
        { id: 12, name: 'Child 1.2', parentId: 1 },
        {
            id: 2,
            name: 'Parent #2',
            children: [ 21, 22 ]
        },
        { id: 21, name: 'Child 2.1', parentId: 2 }, 
        { id: 22, name: 'Child 2.2', parentId: 2 }
    ]
    

    Then you can change template to:

    new Ext.XTemplate( 
        '',
            '
    {name}
    ', '
    ' ),

    and you'll have working selection out-of-box.

    0 讨论(0)
提交回复
热议问题