Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有Zend框架的jqGrid(zfdatagrid)_Javascript_Jquery_Zend Framework_Jqgrid - Fatal编程技术网

Javascript 带有Zend框架的jqGrid(zfdatagrid)

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脚本代码与示

几天之内,我找不到正常的答案。我希望有人能帮助我

我在Zend Framework应用程序中使用jqGrid。我希望我的应用程序中的网格可以内联编辑()。当我不使用ZF并且自己编写jqGrid代码(java脚本)时,内联编辑工作正常。但当使用ZF类“Bvb_Grid_Deploy_JqGrid”并部署网格时,ZF会自行生成java脚本。问题是我找不到ZF方法来正确插入js函数“onsetrow”。尝试在ZF控制器中使用“$grid->jqAddOnLoad($js);”,但此java脚本代码与示例中的代码不同,因此grid根本无法正常加载。 必须是:

但事实上:

$(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);
            }
        }
    });
});
在上面的场景中,必须提到这一点

  • 在创建jqGrid后,我们可以设置(或更改)
    onsetrow
  • 它只能是网格中的一个onsetrow回调。设置新的
    onsetrow
    回调覆盖现有的回调
  • 最后一个限制可能非常困难。例如,您不能对项目中的所有网格执行一些默认的
    onsetrow
    操作,并对一些其他特定操作使用附加的
    onsetrow
    。这是引入类似jQuery的事件的主要原因,这些事件可以以非常接近回调的形式使用。下一个示例演示该技术

    工作原理与前一个完全相同,但它使用
    jqGridSelectRow
    事件,而不是
    onsetrow
    回调。这项新技术有两个重要的优点

  • 可以在创建jqGrid之前或之后设置事件处理程序
    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() ?>