Как отключить вкладки в JqGrid во время выполнения? - PullRequest
0 голосов
/ 29 сентября 2010

Определение двух сеток по умолчанию:

initialise(){
$("#ExpenseTable").jqGrid({
    datatype : "local",
    mtype : 'GET',
    colModel : [ {name:'expnsId',label:'ID', width:150 }, 
                 {name:'userName',label:'NAME', width:150 },
                 {name:'catName',label:'CATEGORY', width:150 },
                 {name:'date',label:'DATE', width:150 },
                 {name:'amount',label:'AMOUNT', width:150 },
                 {name:'status',label:'STATUS', width:150 }],
    pager : '#ExpPager',
    rowNum : 10,
    rowList : [ 10, 20, 30 ],
    sortname : 'invid',
    sortorder : 'desc',
    viewrecords : true,
    autowidth : false,
    caption : 'Expenses Details',
    onSelectRow : function(expnsId) { dispExpensData(expnsId); }
    }); 
$("#tabs").tabs();
getTokens();//Gets the tokens for the logged in user.
refreshExpenseGrid();//Populates data to the grid
dispLeaveGrid();// It ll call the next default grid
 }
 }

$("#LeaveTable").jqGrid({
    datatype : "local",
    mtype : 'GET',
    colModel : [ {name:'leaveId',label:'ID', width:150 }, 
                 {name:'userName',label:'NAME', width:150 },
                 {name:'fdate',label:'DATE', width:150 },
                         {name:'tdate',label:'DATE', width:150 }
                 {name:'status',label:'STATUS', width:150 }],
    pager : '#ExpPager',
    rowNum : 10,
    rowList : [ 10, 20, 30 ],
    sortname : 'invid',
    sortorder : 'desc',
    viewrecords : true,
    autowidth : false,
    caption : 'Leave Applications',
    onSelectRow : function(leaveId) { displeaveData(leaveId); }
    }); 
refreshLeaveGrid();//Populates data to the grid
securedUI();//This ll call the below function, to check whether the remaining tabs can be visible or not

Функция защищенного интерфейса:

function securedUI(){


var secToken = "DELETEUSER";
if(!checkRoleToken(secToken)){//If users dont have token to delete user, the buttons ll be disabled
    $('#expDelete').attr('disabled', 'disabled');
    $('#lveDelete').attr('disabled', 'disabled');
    $('#delUser').attr('disabled', 'disabled');
    $('#roleDel').attr('disabled', 'disabled');
    $('#tokenDel').attr('disabled', 'disabled');
}


var secToken= "VIEWUSER";
if(checkRoleToken(secToken)){
    showUserdetails();//3rd Grid Defn:Contains the table definition for user grid.
    initialiseRole();//4th Grid Defn: Role grid
    showtokens();//5th Grid Defn: token grid
}

Проверить токен:

function checkRoleToken(newToken){
for( var i = 0; i<tokens.length; i++ ){
    var token = tokens[i];//Tokens is like cache, which contains all the tokens that are assigned for the current user.
    if(newToken == token.tokenName){
        return true;
    }
}
return false;
 }

HTML-страница:

<script type="text/javascript">
$(document).ready(function() {
    initialise();
});
</script>

LeaveTable - это вторая сетка, и у меня есть еще 3 сетки. Но я не хочу показывать их всем пользователям, вместо этого администраторы должны видеть их. Токены являются ключом к обнаружению, что пользователь имеет право выполнять любые операции в Приложении. Токены, которые назначены пользователю, будут загружены в кэш на стороне клиента, например, массив tokens.

Каждая функция, такая как ADD, DELETE, UPDATE & VIEW, имеет свои токены в начале функции, которые хранятся в переменной. Эта переменная токена будет отправлена ​​на CheckToken() в качестве аргумента. Там он проверит этот токен по отношению к кешу токена. Он вернет true или false. Операция будет отменена или продолжена в соответствии с этим результатом.

В приведенном выше коде в конце определения сетки LeaveTable вы можете увидеть вызов функции securedUI();. Внутри этой функции я делаю две вещи. 1. Отключение кнопок удаления, 2. Отключение сеток 3rd, 4th и 5th для тех, у кого нет токенов DELETEUSER & VIEWUSER.

На самом деле то, что я получаю сейчас, - сетки 3rd, 4th и 5th не отображаются для тех, кто имеет токен VIEWUSER. Посмотрите на функции securedUI() & checkToken(), что они должны делать !!! У securedUI () есть токен VIEWUSER и текущий пользователь, поэтому checkToken () должен возвращать true, поэтому он должен войти в блок if и выполнить вызовы функций внутри блока if. Но это не так. Я не могу понять, где я ошибаюсь.

Итак, я включил firebug и проверил его шаг за шагом. Как ни странно, теперь он входит в блок if и показывает сетку для пользователей-администраторов. Теперь я почувствовал, что это сработало, затем я выключил firebug и перезагрузил страницу снова. Ой, опять же, что 3 оставшиеся сетки не отображаются. Можете ли вы сейчас получить представление о моей проблеме !!!

Любые предложения !!!

1 Ответ

2 голосов
/ 30 сентября 2010

Мне кажется, что вы должны просто поместить весь свой код JavaScript в дескриптор jQuery(document).ready: jQuery(document).ready(function() {/* place your code here */});

Если вы используете этот дескриптор, пожалуйста, опубликуйте более полный код вашего примера, включая полный HTMLкод.Вы можете уменьшить пример кода, чтобы пример был более компактным.Важно только то, что проблема остается в коде, и каждый может воспроизвести проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...