2014-09-03 3 views
1

Я прочел this post о причине, по которой свойство j_Grid's no_legacy_api присвоено true. Я получаю его ответ. Итак, теперь мой вопрос: когда и зачем вы устанавливаете (или оставляете значение) это свойство false?Когда вы используете jqGrid no_legacy_api = false?

Я посмотрел код. С моим ограниченным ноу-хау в функции jQuery, чтобы расширить объект javascript, мне кажется, что если no_legacy_api является ложным, расширение jqGrid() будет расширять как jqGrid, так и jQuery. Это верно? Если да, то зачем вам это делать?

ответ

1

Вы можете найти два примера использования jqGrid methods:

  1. $("#grid_id").jqGridMethodName(parameter1, ..., parameterN);
  2. $("#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");

+0

Спасибо Oleg за ваш ответ. Но я не уверен, что вы ответили на мой вопрос. На мой вопрос, почему jqGrid разрешает использование двух способов вызова своих функций в одной и той же странице/приложении. (Это позволяет это, если вы установите no_legacy_api на false). Это, похоже, способствует плохой практике ИМХО. Я думаю, что он должен просто разрешить один или другой - и разрешить первый/старый способ вызова функций при установке no_legacy_api на false. –

+0

@FrankFajardo: Я объяснил вам, как «jgrid.no_legacy_api» ** реализован ** в jqGrid. API нового стиля используется внутри всего кода jqGrid. Я лично использую только новый API стиля в своих демонстрационных версиях. Использование устаревшего API опасно из-за возможных конфликтов имен. Я не вижу никаких преимуществ запрещать новые API с настройкой по умолчанию 'no_legacy_api = true'. Если вы все еще думаете, что это ошибка, вы должны опубликовать отчет об ошибке в trirand. Я не верю, что изменения, которые вы хотите, будут реализованы в jqGrid, потому что это требует изменения большого количества существующего кода, который использует jqGrid. – Oleg

+1

@FrankFajardo: Краткое описание: запрет нового стиля (ваша интерпретация 'no_legacy_api = false') делает неправильные все внутренние вызовы jqGrid, потому что он использует новый стиль API. – Oleg

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