jqGrid的:在模态初始化,我将如何确定正在创建什么样的模式(添加/编辑)(JQgrid: Dur

2019-10-17 01:04发布

我有一个情况,当我需要提供基于如果用户正在编辑或添加不同的源ID。 我最初的想法是,设置使用beforeShowForm钩一个隐藏字段的值,但似乎就是所谓的钩子函数之前,组件才能得到初始化。 因此,我无法确定正在初始化时的那个阶段产生什么样的模式。

[一种]

//initLoadNoEdit gets called... (At this point I need to know if its going to be an add/edit.)
initLoadNoEdit = function (elem) {
    if ($('#curr_action').val() == 'add') {
        createLoadNumberWidget(elem, "#Date", 'some_url');
    } else {
        createLoadNumberWidget(elem, "#modal_date", 'some_url');
    }
}

var colModel = [
        { name: 'FI_ID', index: 'FI_ID', key: true, editable: false, hidden: true, search: false },     
        { name: 'LILBP_ID', index: 'LILBP_ID', editrules: { required: true }, editoptions: { dataInit: initLoadNoEdit } }
];

//...before this gets called
var addBeforeShowOptions = function (form) {
    $('#curr_action').val('add');
}

//...or this
var editBeforeShowOptions = function (form) {
    $('#curr_action').val('edit');
}

然后我试图在点击事件上的按钮添加添加格/编辑一下,我试图.live(),.delegate(),只是一个正常的。点击()。 但没有结果,寻呼机呈现如下..

[B]

   <td id="pager_left" align="left">
      <table cellspacing="0" cellpadding="0" border="0" class="ui-pg-table navtable" style="float:left;table-layout:auto;">
       <tbody>
        <tr>
          <td class="ui-pg-button ui-corner-all" title="Add new row" id="add_theGrid">
              <div class="ui-pg-div">
                 <span class="ui-icon ui-icon-plus"></span>
              </div>
          </td>
        </tr>
       </tbody>
      </table>
    </td>

所以我想是这样

 $('#add_theGrid').live('click', function () { $('#curr_action').val('add'); }); 

 //and

 $('#pager_left').delegate('#add_theGrid','click', function () { $('#curr_action').val('add'); });

他这样说......我不认为传入一个值的变量是去了解这一点的最好方式,因为我相信应该有我的方式,从模态判断,模态它是什么类型的是什么? 我只是一直没能找到它尚未..

Answer 1:

该窗体的标题文字应该是添加和编辑之间的不同:

jQuery('.ui-jqdialog-title').text()

然后,你可以检查它的“添加”或“编辑”的前面。 显然,这不是一个理想的解决方案,但它是使用已经在表格上的数据的简单方法。 我认为这是一个黑客攻击的一位,虽然。


更好的解决方案是使用jqGridAddEditBeforeInitData被解雇之前事件dataInit 。 这是新的一个在4.3.2触发的事件 。 文档是有点稀疏,但如果你在看代码grid.formedit.js你可以看到一个frmoper参数传递指示表单是否处于“添加”或“编辑”模式(我加换行符,使其更易于阅读):

showFrm = $($t).triggerHandler(
            "jqGridAddEditBeforeInitData", 
            [$("#"+frmgr), frmoper]);

据jQuery的文档的triggerHandler ,第二个参数是额外的参数列表。 然后,您可以使用bind添加自己的事件处理程序:

grid.bind('jqGridAddEditBeforeInitData', function(e, form, oper) {
    alert ("Before dataInit, operation is " + oper);
    // Your code here...
});

这是否帮助?



Answer 2:

如果你使用的jqGrid导航,你可以很容易地做到这一点与addfunc,editfunc和delfunc选项。 这样,您就可以在每一个行动和在线编辑以及您已经知道它不会增加,因为你是内联assignate的自定义功能。

检查: http://www.trirand.com/jqgridwiki/doku.php?id=wiki:navigator

如果你需要一个例子请发表的jsfiddle我可以编辑。



文章来源: JQgrid: During modal initialization, how would I determine what model is being created (add/edit)