如何验证字段的值

编写 on_field_validate 事件处理程序来验证字段的值。

例如,当调用 post 方法将记录保存时, 会触发事件;当用户离开用于编辑单价字段值的输入框时,也会触发事件。

function on_field_validate(field) {
     if (field.field_name === 'unitprice' && field.value <= 0) {
        return 'Unit price must be greater that 0';
    }
}

举个例子,以下是不使用 on_field_validate 方法的代码, 它们检查单价字段的值,防止用户输入小于或等于零的值:

function on_edit_form_shown(item) {
    item.each_field( function(field) {
        var input = item.edit_form.find('input.' + field.field_name);
        input.blur( function(e) {
            var err;
            if ($(e.relatedTarget).attr('id') !== "cancel-btn") {
                err = check_field_value(field);
                if (err) {
                    item.alert_error(err);
                    input.focus();
                }
            }
        });
    });
}

function check_field_value(field) {
    if (field.field_name === 'album' && !field.value) {
        return 'Album must be specified';
    }
    if (field.field_name === 'unitprice' && field.value <= 0) {
        return 'Unit price must be greater that 0';
    }
}

on_edit_form_shown 事件处理程序中, 使用 each_field 方法来迭代访问所有字段, 并找到每个字段对应的输入框(如果存在)。每个输入框都有一个包含字段名称的类 ( field_name )。

然后,我们为它分配一个 jQuery blur 事件,在该事件中我们调用 check_field_value 函数,如果它返回包含错误信息的文本字符串,我们会警告用户并将焦点定位到输入框。 在调用函数之前,我们检查是否按下了 “取消” 按钮。

我在实体的模块中定义的 on_edit_form_shown 事件处理程序,所以只在定义它的模块中有效。

我们可以在任务客户端模块中声明以下事件处理程序, 以便在我们需要启用此字段验证的任何模块中编写 check_field_value 函数。 当编辑表单显示后,会首先为每个实体调用任务的

on_edit_form_shown 事件处理程序。 参考 表单窗体事件

function on_edit_form_shown(item) {
    if (item.check_field_value) {
        item.each_field( function(field) {
            var input = item.edit_form.find('input.' + field.field_name);
            input.blur( function(e) {
                var err;
                if ($(e.relatedTarget).attr('id') !== "cancel-btn") {
                    err = item.check_field_value(field);
                    if (err) {
                        item.alert_error(err);
                        input.focus();
                    }
                }
            });
        });
    }
}

在这个事件处理程序中,我们检查实体是否有 check_field_value 属性。 在模块中声明的每个函数,都会成为其所属实体的一个属性。