Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Refresh Treepanel (https://javascript.ru/forum/extjs/37334-refresh-treepanel.html)

constantant 16.04.2013 09:43

Refresh Treepanel
 
Есть TreeStore для дерева.
В нём описаны Fields.
У поля, которое displayField, есть convert.
convert использует внешние данные для преобразования.

Вопрос: как обновить дерево что бы Store остался прежним (то есть не долбился на сервак за обновлением), а только лишь сработал convert с новыми данными?

skrudjmakdak 16.04.2013 10:48

листинг бы глянуть что вы написали..
попробуйте метод store.commitChanges();
вот ссылка на доки:
http://docs.sencha.com/extjs/4.1.3/#...-commitChanges

constantant 16.04.2013 12:59

Цитата:

Сообщение от skrudjmakdak
попробуйте метод store.commitChanges();

да, я его уже пробовал. но дело в том, что он применяется к изменённым record'ам, а у меня как раз смысл в том что store по сути не изменяется, требуется только заново применить метод convert...

skrudjmakdak 16.04.2013 14:45

вот кусок кода. здесь описан сторе

var peremen = 'my Prefix';
var store = undefined;
Ext.onReady(function(){
//------------------
store = Ext.create('Ext.data.Store',
    {
    fields: [
	'id', 
	'name',
	{
	name: 'firstName',
	convert: function(value, record)
	    {
	    return record.get('name') + peremen;
	    }
        }],
    idProperty: 'id',
    remoteSort: true,
    proxy:
	{
	type: 'ajax',
	url: '/getStore',
	actionMethods:
	    {
	    read: 'POST'
	    },
	reader:
	    {
	    root: 'data',
	    totalProperty: 'totalCount'
	    }
	},
    autoLoad: true,
    listeners:
	{
	load:
	    {
	    fn: function()
		{
		setTimeout(function()
		    {
		    if (store.count() > 0)//если записи есть
			console.log(store.getAt(0).data); //выводим объектом первую запись
		    }, 1000);
		}
	    }
	}
    });
//------------------
});


теперь посмотрите на функцию, которая выводит в консоль данные при загрузки объекта. смотрим в консоль.. и мы видим что 'firstName' реально существует. и если нужно данные обновить, то тут есть вариант перебрать всю стору циклом (например так):

for(var i = 0; i < store.count(); i++)
    store.getAt(i).set('firstName', 'newValue');

а в конце сделать commitChange();
может и есть метод который будет передергивать конверт, но я пока его не нашел))

constantant 16.04.2013 15:44

Цитата:

Сообщение от skrudjmakdak
перебрать всю стору циклом

ага, я так тоже сделал :D

Цитата:

Сообщение от skrudjmakdak
может и есть метод который будет передергивать конверт, но я пока его не нашел))

да в том-то и засада :(
буду капать дальше, Спасибо!


Часовой пояс GMT +3, время: 16:16.