2013-02-11 2 views
2

Использование Dojo Я установил сетку, которая ссылается на хранилище данных. После загрузки сетки у меня есть функция подключения, которая перемещается по строкам и устанавливает цвет текста строки в зависимости от значения ячейки. Это работает отлично (код скопирован ниже).Обновление Dojo Enhanced Grid Row Style - Post Store Fetch

var gagrid = new dojox.grid.EnhancedGrid({ 
query: { 
Keyword: '*' 
}, 
store: gastore, 
structure: galayout, 
escapeHTMLInData: false, 
plugins: { 
nestedSorting: true 
} 
}, 
document.createElement('div')); 

dojo.connect(gagrid, 'onStyleRow', this, function(row) { 
var item = gagrid.getItem(row.index); 

if (item) { 
var value = gagrid.store.getValue(item, "Performance", null); 
if (value == 3) { 
row.customStyles += "color: green;"; 
} else if (value == 2) { 
row.customStyles += "color: red;"; 
} 
} 
gagrid.focus.styleRow(row); 
gagrid.edit.styleRow(row); 
}); 

У меня есть функция после загрузки страницы/сетки (через взаимодействие с пользователем), которая использует функцию выборки магазина. Он пересекает строки моего хранилища сетки и меняет значение ячейки в зависимости от ввода пользователя. Опять же, это отлично работает, значения в сетке обновляются правильно. Код ниже.

gastore.fetch({ 
query: {Keyword: '*'}, 
onComplete: function(items, request){ 
var i; 
for (i = 0; i < items.length; i++) { 
var item = items[i]; 
var performance; 
if(parseInt(items[i]["Visits"])>=rp) 
{ 
if(parseInt(items[i]["Bounce"])<=rb&&parseInt(items[i]["Time"])>=rmp) 
{ 
performance=3; 
} 
else 
{ 
performance=2; 
} 
} 
else 
{ 
performance=1; 
} 
gastore.setValue(item,"Performance",performance); 
} 
} 
}); 

Однако после того, как значения были обновлены, пользовательские стили не применяются к строкам моментально. Например, цвет текста строки остается зеленым, когда он должен измениться на черный.

После того как сетка была связана с (например, сортировкой столбца), цвета строк обновляются до их правильных цветов.

Есть ли способ вызвать правильные пользовательские стили для строки сетки сразу после того, как функция извлечения магазина была вызвана?

Извинения, если мой вопрос ABIT долго наматываются - просто думал, что я попытаюсь объяснить этот вопрос полностью :)

+0

Просмотреть этот вопрос ...[http://stackoverflow.com/questions/7132559/dojox-datagrid-onstylerow-works-first-time-then-not-again](http://stackoverflow.com/questions/7132559/dojox-datagrid-onstylerow- works-first-time-then-not-again) – Remento

ответ

1

вам не нужно перебрать строки! Вы можете использовать «форматировщик» & «стили» атрибут при определении макета «galayout» ... Взгляните на это:

function getExtImg(valueOfColumn) { // Do something with the value... 
    return valueOfColumn+'do something with it'; 
} 

макета вар = [[ «имя» {: ' Ext», 'поле': 'расширение', форматировщик: getExtImg, стили: 'обивка: 0px;'},

{ 'имя': 'имя файла', 'поле': 'DocumentName' , width: 'auto'}]];

// Добавить этот макет в сетке ...

Что вы указываете в качестве функции форматировщик ист называется для каждой строки! Также стиль, который вы указываете под атрибутом styles.

Я думаю, что это поможет вам решить вашу проблему!

Чтобы иметь возможность изменить стиль строки в форматере, установка функции форматирования, как это:

форматировщик: функция (значение, rowIdx, клетка) { классы = compute_classes (вал, rowIdx, клетка); cell.customClasses.push (классы); }

Источник: How do you conditionally style a cell in a Dojo data grid?

Как видите, должны легко видеть, вы можете добавлять классы для текущей строки с помощью функции толчка!

Lucian

+0

Спасибо, Lucian. Это может помочь. Раньше я использовал форматировщик. Как добавить стиль строки в функцию форматирования (getExtImg)? Есть ли способ сделать это, не возвращая HTML обратно в ячейку? –

+0

Привет, Matt, каждая функция форматирования также вызывается со вторым атрибутом rowIndex, указав индекс строки, в которую в данный момент выполняется форматирование. Я думаю, что с помощью rowIndex вы можете получить доступ к строке-объекту, используя сетку. –

+0

Посмотрите на главный пост, пожалуйста, я добавил что-то, что должно помочь вам в вашей последней проблеме тоже! –