Вы можете найти два примера использования jqGrid methods:
$("#grid_id").jqGridMethodName(parameter1, ..., parameterN);
$("#grid_id").jqGrid("jqGridMethodName", parameter1, ..., parameterN);
jqGrid является JQuery плагин. Таким образом, он расширяет список методов, которые существуют в объектах jQuery (например, на объекте $("#grid_id")
). Проблема может возникнуть, если вы используете множество плагинов на одной странице. Если два плагина используют одно и то же имя (например, getInd
или clearBeforeUnload
), у вас будут конфликты имен, а последний вставленный Javascrpt-плагин перезапишет некоторые предыдущие методы.
Установка опции
$.jgrid.no_legacy_api = true;
позволяет изменять поведение jquery.jqGrid.min.js
(jquery.jqGrid.src.js
), так что число расширений JQuery будет сведено к минимуму. jqGrid сначала регистрирует метод $.jgrid.extend
(см. here), который позднее он использовал для регистрации самых jqGrid-методов (например, here).
Правильное использование no_legacy_api
следующей
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript">
$.jgrid.no_legacy_api = true;
$.jgrid.useJSON = true;
</script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/jquery.jqGrid.min.js"></script>
Таким образом, вы jquery
включает первый, а затем установите $.jgrid.no_legacy_api
в true
и, наконец, вы включаете jquery.jqGrid.min.js
. Позже в вашем коде вы можете использовать конструкции вроде var selRow = $("#list").jqGrid("getGridParam", "selrow");
, но не можете больше использовать var selRow = $("#list").getGridParam("selrow");
Спасибо Oleg за ваш ответ. Но я не уверен, что вы ответили на мой вопрос. На мой вопрос, почему jqGrid разрешает использование двух способов вызова своих функций в одной и той же странице/приложении. (Это позволяет это, если вы установите no_legacy_api на false). Это, похоже, способствует плохой практике ИМХО. Я думаю, что он должен просто разрешить один или другой - и разрешить первый/старый способ вызова функций при установке no_legacy_api на false. –
@FrankFajardo: Я объяснил вам, как «jgrid.no_legacy_api» ** реализован ** в jqGrid. API нового стиля используется внутри всего кода jqGrid. Я лично использую только новый API стиля в своих демонстрационных версиях. Использование устаревшего API опасно из-за возможных конфликтов имен. Я не вижу никаких преимуществ запрещать новые API с настройкой по умолчанию 'no_legacy_api = true'. Если вы все еще думаете, что это ошибка, вы должны опубликовать отчет об ошибке в trirand. Я не верю, что изменения, которые вы хотите, будут реализованы в jqGrid, потому что это требует изменения большого количества существующего кода, который использует jqGrid. – Oleg
@FrankFajardo: Краткое описание: запрет нового стиля (ваша интерпретация 'no_legacy_api = false') делает неправильные все внутренние вызовы jqGrid, потому что он использует новый стиль API. – Oleg