2015-06-12 4 views
1

У меня есть функция isDuplicate(), которую мне нужно установить как функцию проверки правильности для моего ValidationTextBox. Так что то, что я делаю:Как установить функцию валидатора в dojo программно

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"'       

       } 

Я получаю эту ошибку: Невозможно установить значение ячейки: TypeError: не определено не является функцией

ответ

1

У вас есть вопрос Scope. Когда реквизит обрабатывается ValidationTextBox, родительская переменная больше не отображается. Так как я сам был не в состоянии определить достойные средства обработки объема в пределах строки реквизита, я нашел простое решение, чтобы обернуть виджет, чтобы снискать контекст конструктор виджета:

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), 

Я знаю, что это, вероятно, не поможет вам, будучи почти год спустя, но я полагал, что это будет стоить проводки, так как я столкнулся с точно такой же проблемой.