Столбец флажка jqGrid - PullRequest
       14

Столбец флажка jqGrid

3 голосов
/ 21 декабря 2011

У меня довольно сложная сетка с двумя столбцами, отформатированными как флажок. Эти столбцы определены следующим образом:

{ name: 'Alert_A', index: 'Alert_A', width: 22, align: 'center', sortable: false,
    formatter: CheckBoxFormatter, editable: true, edittype: 'checkbox', editoptions: {value: "True:False"}, 
    formatoptions: {disabled: false}, classes: "Alert_A" },
{ name: 'Alert_B', index: 'Alert_B', width: 22, align: 'center', sortable: false,
    formatter: CheckBoxFormatter, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
    formatoptions: {disabled: false}, classes: "Alert_B" }

Настраиваемый форматер CheckBoxFormatter необходим, потому что мне нужно настроить атрибут отключен для каждого флажка в зависимости от некоторых пользовательских правил, поэтому я позаимствовал собственный форматер 'checkbox' и добавил свои пользовательские правила.

У меня также есть внешний элемент кнопки html, и когда я нажимаю на него, мне нужно выполнить некоторый код в зависимости от того, какая комбинация выбора флажков была сделана. Мой код выглядит так:

$('#btnAlert').button().click(function (event) {
    event.preventDefault();
    var dashboardID = '#<%=dashboard.ClientID %>';
    doWork(dashboardID);
});

и позже doWork функция

var keys = $(dashboardID).getDataIDs();
for (var i = 0; i < keys.length; i++) {
    var rowData = $(dashboardID).getRowData(keys[i]);
    ...
    var reminderA = $(rowData.Alert_A).is(":checked");
    var reminderB = $(rowData.Alert_B).is(":checked");
    ...
    ... other application logic here
}

К сожалению, я испытываю тот факт, что значение переменных reminderA и reminderB не отражает точное состояние флажков, а вместо этого всегда отражает состояние их начальных значений (например, когда они были загружены плагин jqgrid). Другими словами, эти значения не обновляются, когда пользователь нажимает на флажок в сетке.

Это правильный путь для достижения моего результата, или я должен использовать другой код? Любая помощь?

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 22 декабря 2011

Проблема, которую вы имеете, может быть объяснена очень легко. Вы используете включенные флажки (formatoptions:{disabled: false}), чтобы пользователь мог изменять состояние флажков. Проблема в том, что вы используете свой собственный CheckBoxFormatter вместо оригинального форматера 'checkbox'. Метод getRowData, который вы используете, пытается вызвать unformatter, который вы не определили . Таким образом, значение для флажка будет получено с использованием $(cellval).text() (см. исходный код unformatter ) и всегда будет пустым.

Так что, если вы определяете свой пользовательский форматер и используете методы, такие как getRowData, вы должны определить unformatter .

В вашем случае вам вообще не нужно использовать пользовательский форматер. Вам нужно просто определить атрибут disabled="disabled" для некоторых флажков, которые зависят от некоторых пользовательских правил. Так что вы хотите определить только форматер для атрибутов . cellattr (см. здесь и здесь примеров использования и мой оригинальный запрос функции ) очень прост в использовании, и это именно то, что тебе нужно. Например, это может быть похоже на следующее

cellattr: function (rowId, value, rawObject) {
    if (rawObject.deliveryStatus !== "sent") {
        return '';
    } else {
        return ' disabled="disabled"';
    }
}

В случае, если вы можете использовать оригинальный флажок formater и unformatter, и все будет работать правильно.

0 голосов
/ 22 декабря 2011

Я полагаю, что у вас есть скрипт, который связывает '#btnAlert' и doWork () в документе. Я столкнулся с такой проблемой и должен был связать функциональность со встроенным скриптом после инициализации jqgrid. подскажите пожалуйста, работает ли он!

...