1

我有一个案例,我需要根据用户是否正在编辑或添加来提供不同的源 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() 和一个普通的 .click()。但没有结果,寻呼机呈现如下..

[乙]

   <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'); });

话虽这么说...我不认为将值传递给变量是解决此问题的最佳方法,因为我确信我应该有一种方法可以从模态中确定它是什么类型的模态是?我只是还没有找到它。。

4

2 回答 2

2

Add 和 Edit 之间的表单标题文本应该不同:

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

然后您可以检查它的前面是否有“添加”或“编辑”。显然这不是一个理想的解决方案,但它是一种使用表单上已有数据的简单方法。不过,我认为这有点骇人听闻。


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

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

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

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

这有帮助吗?

于 2012-07-23T14:31:43.677 回答
0

如果您使用的是 jqGrid Navigator,您可以使用 addfunc、editfunc 和 delfunc 选项轻松完成此操作。通过这种方式,您可以为每个操作分配一个自定义函数,并且对于内联编辑,您已经知道它不是添加的,因为您是内联的。

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

如果您需要示例,请发布我可以编辑的 jsfiddle。

于 2012-07-23T15:19:41.463 回答