Breeze.js & Knockout.js: a tradução da validação da brisa para a validação do knockout causa um 'espaço em pilha' ou 'muita recursão'

Eu tenho um modelo do lado do cliente gerado pelo Breeze / OData e usei o código emesta postagem para conectá-lo à validação do Knockout.

Funciona muito bem para validar campos individuais através doisValid() método. No entanto, sempre que tento usarko.validation.group contra uma Entidade Breeze (suponha que a validação de knockout esteja configurada{deep: true}), quer chamandoshowAllMessages, length ou qualquer outro método que execute uma travessia de árvore sobre o gráfico de objetos, resulta em uma exceção de recursão infinita em tempo de execuçãoknockout.validation.js@231-271). Dependendo do navegador pode ser "Out of stack space" (IE) ou "Too much recursion" (Firefox).

Eu acho que a causa raiz do erro é que o algoritmo dentro do Knockout Validation não controla os nós visitados anteriormente. Todas as Entidades Breeze contêm umentityAspect propriedade e o código dentroknockout.validation visita todas as propriedades e todos os seus filhos usando profundidade primeiro, mas sem lembrar os nós já visitados. E porqueentityAspect contém uma referência de volta à sua entidade contida, isso resulta em um estouro de pilha.

validate(entity) // Initial call
    => validate(entity.entityAspect) // Validate the first property of the root
    => validate(entity.entityAspect.entity) // Validate the first property of the child, which points back to the root!

Então, depois de tudo isso, a questão é:Você conhece algum trabalho para evitar esse comportamento?

Por enquanto, acho que vou usar um hack barato e sujo por dentroknockout.validation para evitar entrar em umentityAspect propriedade, mas tenho certeza que deve haver uma maneira melhor.

questionAnswers(0)

yourAnswerToTheQuestion