2010-09-29 2 views
0

Два По умолчанию Сетки Defenition:Как отключить вкладки в JqGrid во время выполнения?

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 

Обеспеченные UI Функция:

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 сетки. Но я не хочу показывать их всем пользователям, а администратор должен их видеть. Токены - это ключ к тому, что пользователь имеет право выполнять любую операцию в приложении. Токены, назначенные для пользователя, будут загружены в клиентский кеш, например Array tokens.

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

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

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

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

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

ответ

2

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

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

+0

@ Вопрос теперь обновлен.Думаю, теперь это будет иметь смысл. – 2010-09-30 05:26:20

+0

@NooBDevelopeR: А где ** полный ** HTML? Тестирование данных JSON также будет полезно для ** воспроизведения ** проблемы. – Oleg

+0

@NooBDevelopeR: Где у вас есть слово * function * before 'initialise() {...' или лучше 'var initialise = function() {...'? Что означает ** дважды **} после 'dispLeaveGrid();' и второе определение '$ (" # ExpenseTable "). JqGrid ({...'? Где определение 'refreshExpenseGrid()', 'getTokens 'и другие функции, которые вы используете? То, что вы в настоящее время размещаете, это фрагменты кода, размещенные вместе, и ** NOT ** код, который можно использовать для ** воспроизведения ** вашей проблемы. Если вы хотите, чем другую помощь, вы можете найти ошибку в ваша программа должна опубликовать вашу программу. – Oleg

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