Javascript 带有Zend框架的jqGrid(zfdatagrid)
几天之内,我找不到正常的答案。我希望有人能帮助我 我在Zend Framework应用程序中使用jqGrid。我希望我的应用程序中的网格可以内联编辑()。当我不使用ZF并且自己编写jqGrid代码(java脚本)时,内联编辑工作正常。但当使用ZF类“Bvb_Grid_Deploy_JqGrid”并部署网格时,ZF会自行生成java脚本。问题是我找不到ZF方法来正确插入js函数“onsetrow”。尝试在ZF控制器中使用“$grid->jqAddOnLoad($js);”,但此java脚本代码与示例中的代码不同,因此grid根本无法正常加载。 必须是: 但事实上:Javascript 带有Zend框架的jqGrid(zfdatagrid),javascript,jquery,zend-framework,jqgrid,Javascript,Jquery,Zend Framework,Jqgrid,几天之内,我找不到正常的答案。我希望有人能帮助我 我在Zend Framework应用程序中使用jqGrid。我希望我的应用程序中的网格可以内联编辑()。当我不使用ZF并且自己编写jqGrid代码(java脚本)时,内联编辑工作正常。但当使用ZF类“Bvb_Grid_Deploy_JqGrid”并部署网格时,ZF会自行生成java脚本。问题是我找不到ZF方法来正确插入js函数“onsetrow”。尝试在ZF控制器中使用“$grid->jqAddOnLoad($js);”,但此java脚本代码与示
$(document).ready(function() {
jQuery("#jqg_RentAsset").jqGrid(
{
onSelectRow: function(id)
{
alert(id);
}
});
jQuery("#jqg_RentAsset").jqGrid(
{
"height":"250",
...
});
也许有人知道我必须在ZF控制器中使用什么方法,或者我需要以怎样的方式编写java脚本?我自己不使用Zend Framework。因此,我的建议很常见,并且与您使用的框架无关 在下面的示例中,我将展示如何在网格上动态设置
onsetrow
,以实现行选择的内联编辑。我假设网格中已经存在其他必需的设置,如editable:true
属性colModel
和editurl
选项。因此,我只动态显示了onsetrow
的设置
第一种方法是使用setGridParam
设置onsetrow
回调。相应的应用程序使用以下代码:
$(function () {
var $grid = $("#list"),
editingRowId,
myInlineEditingOptions = {
keys: true,
oneditfunc: function (id) { editingRowId = id; },
afterrestorefunc: function () { editingRowId = undefined; },
aftersavefunc: function () { editingRowId = undefined; }
};
$grid.jqGrid({
datatype: 'local',
....
editurl: 'clientArray'
});
// now we set or change onSelectRow callback AFTER jqGrid is created
$grid.jqGrid('setGridParam', {
onSelectRow: function (id) {
if (id !== editingRowId) {
if (typeof editingRowId !== "undefined") {
// save previously editing row
//$(this).jqGrid("saveRow", editingRowId, myInlineEditingOptions);
// discard changes from the previously editing row
$(this).jqGrid("restoreRow", editingRowId, myInlineEditingOptions);
}
// start inline editing. The user should save the row by pressing ENTER
$(this).jqGrid("editRow", id, myInlineEditingOptions);
}
}
});
});
在上面的场景中,必须提到这一点
onsetrow
onsetrow
回调覆盖现有的回调onsetrow
操作,并对一些其他特定操作使用附加的onsetrow
。这是引入类似jQuery的事件的主要原因,这些事件可以以非常接近回调的形式使用。下一个示例演示该技术
工作原理与前一个完全相同,但它使用jqGridSelectRow
事件,而不是onsetrow
回调。这项新技术有两个重要的优点
jqGridSelectRow
。如果使用绑定事件处理程序,则将转换为网格的
元素应该存在。如果使用的速度稍微慢一点,或者(最后一个是从jquery1.7开始的)可以绑定
事件处理程序在任何时候都可以运行jqGridSelectRow
事件处理程序,所有这些处理程序都将在唯一的onsetrow
回调(如果存在)之前执行。通过这种方式,您可以在jqGridSelectRow
事件处理程序中实现一些常见操作,并可以使用其他jqGridSelectRow
事件处理程序或onsetrow
回调来执行特定于网格的操作。对于终结操作,您可以使用onsetrow
callback$(function () {
var $grid = $("#list"),
editingRowId,
myInlineEditingOptions = {
keys: true,
oneditfunc: function (id) { editingRowId = id; },
afterrestorefunc: function () { editingRowId = undefined; },
aftersavefunc: function () { editingRowId = undefined; }
};
$grid.bind("jqGridSelectRow", function (e, id) {
if (id !== editingRowId) {
if (typeof editingRowId !== "undefined") {
// save previously editing row
//$(this).jqGrid("saveRow", editingRowId, myInlineEditingOptions);
// discard changes from the previously editing row
$(this).jqGrid("restoreRow", editingRowId, myInlineEditingOptions);
}
// start inline editing. The user should save the row by pressing ENTER
$(this).jqGrid("editRow", id, myInlineEditingOptions);
}
});
$grid.jqGrid({
datatype: 'local',
....
editurl: 'clientArray'
});
});
更新了:我忘了提到,在绑定事件期间可以使用名称空间。它在更复杂的场景中非常有用。如果使用
$grid.bind(“jqGridSelectRow.myNamespace”,…)
然后您将能够使用$grid.unbind('.myNamespace')仅解除绑定自己的事件
或$grid.unbind('jqGridSelectRow.myNamespace')代码>。它不会解除具有其他命名空间的其他事件的绑定。我稍微改变了一点行为。我在ZF视图(phtml文件)中编写了java脚本“onsetrow”,如:
$(文档).ready(函数(){
var lastSel;
jQuery(“#jqg_rentaste”).jqGrid('setGridParam'{
OnSetrow:功能(id)
{
警报(id);
}
});
});
以及它的工作原理。我需要的是“setGridParam”
但实际上,在ZF控制器中使用“$grid->jqAddOnLoad($js);”时,这个东西不起作用。当我有时间的时候,我会调查还需要做什么。但现在我很高兴。此外,可能还可以使用“$grid->setParams(array)”。。。
再次感谢。:) 多谢各位。你帮了我很多!
$(function () {
var $grid = $("#list"),
editingRowId,
myInlineEditingOptions = {
keys: true,
oneditfunc: function (id) { editingRowId = id; },
afterrestorefunc: function () { editingRowId = undefined; },
aftersavefunc: function () { editingRowId = undefined; }
};
$grid.bind("jqGridSelectRow", function (e, id) {
if (id !== editingRowId) {
if (typeof editingRowId !== "undefined") {
// save previously editing row
//$(this).jqGrid("saveRow", editingRowId, myInlineEditingOptions);
// discard changes from the previously editing row
$(this).jqGrid("restoreRow", editingRowId, myInlineEditingOptions);
}
// start inline editing. The user should save the row by pressing ENTER
$(this).jqGrid("editRow", id, myInlineEditingOptions);
}
});
$grid.jqGrid({
datatype: 'local',
....
editurl: 'clientArray'
});
});
<?php $this->headScript()->captureStart() ?>
$(document).ready(function() {
var lastSel;
jQuery("#jqg_RentAsset").jqGrid('setGridParam', {
onSelectRow: function(id)
{
alert(id);
}
});
});
<?php $this->headScript()->captureEnd() ?>