Два По умолчанию Сетки 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 оставшиеся сетки не отображаются. Можете ли вы теперь получить представление о моей проблеме !!!
Любые предложения !!!
@ Вопрос теперь обновлен.Думаю, теперь это будет иметь смысл. – 2010-09-30 05:26:20
@NooBDevelopeR: А где ** полный ** HTML? Тестирование данных JSON также будет полезно для ** воспроизведения ** проблемы. – Oleg
@NooBDevelopeR: Где у вас есть слово * function * before 'initialise() {...' или лучше 'var initialise = function() {...'? Что означает ** дважды **} после 'dispLeaveGrid();' и второе определение '$ (" # ExpenseTable "). JqGrid ({...'? Где определение 'refreshExpenseGrid()', 'getTokens 'и другие функции, которые вы используете? То, что вы в настоящее время размещаете, это фрагменты кода, размещенные вместе, и ** NOT ** код, который можно использовать для ** воспроизведения ** вашей проблемы. Если вы хотите, чем другую помощь, вы можете найти ошибку в ваша программа должна опубликовать вашу программу. – Oleg