如何使用Fontawesome复选框格式化程序从free jqgrid中的已发布行中删除操作按钮

时间:2015-03-30 09:56:19

标签: javascript jquery jqgrid free-jqgrid

Free jqgrid包含布尔隐藏列IsPosted,定义为

    {"label":null,"name":"IsPosted",
 "edittype":"checkbox","editoptions":{"value":"True:False","readonly":"readonly","disabled":"disabled"},
"align":"center",
"formatter":"checkboxFontAwesome4",
"editable":true,
"width":0,"classes":null,
"hidden":true,"stype":"select",
"searchoptions":{"sopt":["eq","ne"],
"value":":Free;true:Yes;false:No"}
    }],
如果此列的值为true,则需要从内联操作工具栏中删除

删除,编辑和自定义发布按钮。这是使用方法

完成的
   disableRows('IsPosted', true);

它适用于Clickable复选框格式化程序。如果使用checkboxFontAwesome4格式化程序,

            isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;

总是假的。我也试过了

            isPosted = $(row.cells[iCol]).children("input:checked").length > 0;

但是对于所有格式化程序来说这都是错误的。我也尝试了template = "booleanCheckboxFa",而不是格式化线,但这并没有显示fontawecome图标。

如何修复它以便与checkboxFontAwesome4格式化程序或所有格式化程序一起使用?

var disableRows = function (rowName, isBoolean) {
    var iCol = getColumnIndexByName($grid, rowName),
              cRows = $grid[0].rows.length,
              iRow,
              row,
              className,
              isPosted,
              mycell,
              mycelldata,
              cm = $grid.jqGrid('getGridParam', 'colModel'),
              iActionsCol = getColumnIndexByName($grid, '_actions'), l;
    l = cm.length;
    for (iRow = 0; iRow < cRows; iRow = iRow + 1) {
        row = $grid[0].rows[iRow];
        className = row.className;
        isPosted = false;

        if ($(row).hasClass('jqgrow')) {
            if (!isBoolean) {
                mycell = row.cells[iCol];
                mycelldata = mycell.textContent || mycell.innerText;
                isPosted = mycelldata.replace(/^\s+/g, "").replace(/\s+$/g, "") !== "";
            }
            else {
                isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
            }
            if (isPosted) {
                if ($.inArray('jqgrid-postedrow', className.split(' ')) === -1) {
                    row.className = className + ' jqgrid-postedrow not-editable-row';
                    $(row.cells[iActionsCol]).attr('editable', '0');
                    $(row.cells[iActionsCol]).find(">div>div.ui-inline-del").hide();
                    $(row.cells[iActionsCol]).find(">div>div.ui-inline-post").hide();
                    $(row.cells[iActionsCol]).find(">div>div.ui-inline-edit").hide();
                }
            }
        }
    }
};

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了你的问题。您可能只想测试单元格row.cells[iCol]是否包含已检查符号(<i>与类fa-check-square-o)或未查询(<i>fa-square-o)。你可以使用unformatter。如果你喜欢像

那样的低级方式
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;

然后你可以使用

isPosted = $(row.cells[iCol]).find("i").hasClass("fa-check-square-o");

代替。

更新:可以使用

var isPostedStr = $.unformat.call(this, row.cells[iCol],
        {rowId: row.id, colModel: cm}, iCol);
if (cm.convertOnSave) {
    isPosted = cm.convertOnSave.call(this, {
                   newValue: isPostedStr,
                   cm: cm,
                   oldValue: isPostedStr,
                   id: row.id,
                   //item: $grid.jqGrid("getLocalRow", row.id),
                   iCol: iCol
               });
}

我认为this等于$grid[0]cmcolModel[iCol]。返回的值将是字符串"true""false",并且要将布尔变量转换为true或false。确切地说,返回值取决于使用的editoptions.valuetemplate: "booleanCheckboxFa"使用editoptions: {value: "true:false", defaultValue: "false"}。因此返回的值是字符串"true""false"。如果您想将结果清晰转换为布尔值,我建议您查看convertOnSave的代码。如果它存在,我包括了cm.convertOnSave的调用。通常情况下,应该初始化行的item属性,但像formatter: "checkboxFontAwesome4"这样的简单格式化程序不会使用该值。