2014-09-03 64 views
1

我已阅读this post关于您将jqGrid的no_legacy_api属性设置为true的原因。我有点得到他的答案。因此,我现在的问题是何时以及为什么要将该属性设置为false(或将其值)?你什么时候使用jqGrid no_legacy_api = false?

我看了一下代码。由于我对jQuery的函数有限的知识来扩展一个JavaScript对象,在我看来,如果no_legacy_api为false,jqGrid的extend()将扩展jqGrid和jQuery。那是对的吗?如果是这样,你为什么要这样做?

回答

1

你可以找到使用的jqGrid methods的两个例子:

  1. $("#grid_id").jqGridMethodName(parameter1, ..., parameterN);
  2. $("#grid_id").jqGrid("jqGridMethodName", parameter1, ..., parameterN);

的jqGrid是jQuery插件。所以它扩展了存在于jQuery对象上的方法列表(如对象$("#grid_id"))。如果您在一个页面上使用多个插件,则问题可能存在。如果两个插件使用相同的名称(例如getIndclearBeforeUnload),则会产生名称冲突,最后插入的Javascrpt插件将覆盖前一个插件的某些方法。

设置选项

$.jgrid.no_legacy_api = true; 

允许您更改的jquery.jqGrid.min.jsjquery.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_apitrue最后你包括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时,允许第一种/旧式调用函数的方式。 – 2014-09-04 01:17:15

+0

@FrankFajardo:我解释了jqGrid中如何实现** jgrid.no_legacy_api ** **。新风格的API在所有jqGrid代码中都内部使用。我个人在演示中只使用新风格的API。遗留API的使用是危险的,因为可能存在名称冲突。我没有看到使用默认'no_legacy_api = true'设置禁止新API的优势。如果您仍然认为这是一个错误,那么您应该将错误报告发布到trirand。我不相信你想要的变化会在jqGrid中实现,因为它需要改变很多使用jqGrid的现有代码。 – Oleg 2014-09-04 04:56:16

+1

@FrankFajardo:简短描述:禁止使用新风格(您对'no_legacy_api = false'的解释)会使jqGrid的所有内部调用不正确,因为它使用新的API风格。 – Oleg 2014-09-04 05:00:21

相关问题