2013-08-19 3 views
0

Я пытаюсь предварительно выделить элементы в моей сетке EXT на основе значения одного из элементов в хранилище данных.Предварительный выбор элементов в EXT JS 4.2 Сетка

В моем хранилище данных я извлекаю 7 элементов, последний элемент, который я захватил 'установлен', является BOOLEAN, и я хотел бы использовать его для предварительного выбора элементов в моей сетке.

Вот код, который я до сих пор, что не работает ...

Ext.require([ 
    'Ext.grid.*', 
    'Ext.data.*', 
    'Ext.selection.CheckboxModel' 
]); 

Ext.onReady(function(){ 
Ext.QuickTips.init(); 

var sb = $('#sb_id').val(); 

// Data store 
var data = Ext.create('Ext.data.JsonStore', { 
    autoLoad: true, 
    fields: [ 'name', 'market', 'expertise', 'id', 'isFull', 'isPrimary', 'installed'], 
    proxy: { 
     type: 'ajax', 
     url: '/opsLibrary/getLibraryJsonEdit', 
     extraParams: { 
      sb_id: sb 
     }, 
     actionMethods: 'POST' 
    }, 
    sorters: [{ 
     property: 'market', 
     direction: 'ASC' 
    }, { 
     property: 'expertise', 
     direction: 'ASC' 
    }] 
}); 

data.on('load',function(records){ 
    Ext.each(records,function(record){ 

     var recs = []; 
     Ext.each(record, function(item, index){ 

      console.log(item.data); 
      if (item.data['installed'] == true) { 
       console.log('Hi!'); 
       recs.push(index); 
      } 
     }); 
     //data.getSelectionModel().selectRows(recs); 
    }) 
}); 

// Selection model 
var selModel = Ext.create('Ext.selection.CheckboxModel', { 
    columns: [ 
     {xtype : 'checkcolumn', text : 'Active', dataIndex : 'id'} 
    ], 
    listeners: { 
     selectionchange: function(value, meta, record, row, rowIndex, colIndex){ 
      var selectedRecords = grid4.getSelectionModel().getSelection(); 
      var selectedParams = []; 

      // Clear input and reset vars 
      $('#selected-libraries').empty(); 
      var record = null; 
      var isFull = null; 
      var isPrimary = null; 

      // Loop through selected records 
      for(var i = 0, len = selectedRecords.length; i < len; i++){ 
       record = selectedRecords[i]; 

       // Is full library checked? 
       isFull = record.get('isFull'); 

       // Is this primary library? 
       isPrimary = record.get('isPrimary'); 

       // Build data object 
       selectedParams.push({ 
        id: record.getId(), 
        full: isFull, 
        primary: isPrimary 
       }); 
      } 
      // JSON encode object and set hidden input 
      $('#selected-libraries').val(JSON.stringify(selectedParams)); 
     }} 
}); 

Я пытался использовать метод on.load после того, как магазин был заполнен, чтобы вернуться назад и заранее выбрать мои детали, но я не повезло.

Я парень на Питоне и не обойдусь JS слишком сильно, поэтому жалею об отсутствии.

Любая помощь будет оценена по достоинству.

Еще раз спасибо!

ответ

2

Вы должны быть в состоянии сделать что-то вроде:

//create selModel instance above 
data.on('load', function(st, recs) { 
    var installedRecords = Ext.Array.filter(recs, function(rec) { 
     return rec.get('installed'); 
    }); 

    //selModel instance 
    selModel.select(installedRecords); 
}); 

Select может принимать массив записей.
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.selection.Model-method-select

//data.getSelectionModel().selectRows(recs); 

Не работает, потому что магазин не имеют ссылки на модели выбора является наоборот. Вы можете получить модель выбора из сетки, делая grid.getSelectionModel() или вы можете просто использовать экземпляр selModel созданного

var selModel = Ext.create('Ext.selection.CheckboxModel', { 
+0

Это работало красиво и большое спасибо за идти дополнительный шаг и объяснить, где я пошло не так. – xXPhenom22Xx

+0

@ xXPhenom22Xx добро пожаловать Чувак – pllee

Смежные вопросы