我有isDuplicate()函数,我需要将其设置为ValidationTextBox的验证器函数。这就是我正在做的:
parent=this;
var structure = [
{"id": "Name", "field": "Name", "name": "Name", width: "40%",
widgetsInCell: true,
alwaysEditing: true,
editor: ValidationTextBox,
editorArgs: {
props: 'required:true, validator: parent.isDuplicate ,invalidMessage:"Duplicate Name"'
}
我收到此错误:无法设置单元格值:类型错误:未定义不是函数
您有一个范围问题。 当 props 由 ValidationTextBox 处理时,父变量不再可见。 由于我自己无法确定处理 props 字符串中作用域的体面方法,因此我发现最简单的解决方案是包装小部件以将上下文压缩到小部件构造函数中:
define(['dojo/_base/declare', 'dijit/form/ValidationTextBox'], function (declare, ValidationTextBox) {
return function (validationContext) {
return declare('DuplicateEntryValidationTextBox', [ValidationTextBox], {
validationContext: validationContext,
validator: function (value, constraints) {
validationContext.isDuplicate(value, constraints);
}
})
}
});
...
editor = DuplicateEntryValidationTextBox(parent),
或使用 IIFE:
editor: (function (validationContext) {
return declare('DuplicateEntryValidationTextBox', [ValidationTextBox], {
validationContext: validationContext,
validator: function (value, constraints) {
return validationContext.isDuplicate(value);
}
});
})(parent),
我知道这可能对你没有帮助,将近整整一年后,但我认为值得发布,因为我遇到了完全相同的问题。