Knockout: Modelo de renderização baseado no tipo de objeto

Criado em 20 jul. 2019  ·  5Comentários  ·  Fonte: knockout/knockout

Olá,

Estou implementando um questionário e estou procurando um conselho sobre a implementação. Existem vários tipos de perguntas: alguns exigem que o usuário digite a resposta, outros selecionem os botões de opção e assim por diante.

O que eu gostaria é de ter uma classe javascript diferente para cada tipo de pergunta, e ter knockout render cada objeto de pergunta usando um modelo escolhido automaticamente com base no tipo de objeto.

O que estou pedindo é um conselho geral sobre a melhor maneira de implementar isso. No momento minha ideia é usar a ligação foreach e dentro desse loop, use ligações if para verificar o tipo de objeto.

No entanto, gostaria de saber se existe uma maneira elegante de resolver esse problema usando componentes ou algo semelhante. Eu gostaria de torná-lo reutilizável e encapsular essa lógica o máximo possível.

Obrigado

Comentários muito úteis

Todos 5 comentários

Ok, acho que o que estou procurando é uma maneira de escolher um modelo baseado em um parâmetro do viewModel, porém no manipulador de componentes, a função do modelo parece não ter acesso ao estado da função viewModel.

Meu entendimento é que o que eu preciso fazer é implementar um componentLoader personalizado para registrar uma função loadTemplate personalizada, então a pergunta é: como posso adicionar valores personalizados à propriedade templateConfig da função loadTemplate?

https://knockoutjs.com/documentation/component-binding.html

https://knockoutjs.com/documentation/component-loaders.html

Acho que o encapsulamento dos vários tipos de pergunta/resposta é ideal, mas não muito útil, pois não há complexidade real para cada tipo.
Um exemplo simples: https://codepen.io/bludev/pen/aevYrN

Fazemos algo semelhante ao que você está perguntando (se estou interpretando seu caso de uso corretamente):

Temos um arranjo de componente por tipo, de modo que obtemos o nome do componente a ser usado para o tipo fornecido, visto aqui:

https://github.com/OHDSI/Atlas/blob/master/js/components/cohortbuilder/components/CohortExpressionEditor.js#L361

Você registra um componente ko com um determinado nome que corresponde ao tipo fornecido. Você passa os dados como um param para o componente, e o componente é responsável por fornecer o elemento de interface do usuário para modificar o tipo.

Exemplo de um dos componentes:
Modelo: https://github.com/OHDSI/Atlas/blob/master/js/components/cohortbuilder/components/ConditionOccurrenceTemplate.html
ViewModel: https://github.com/OHDSI/Atlas/blob/master/js/components/cohortbuilder/components/ConditionOccurrence.js

Obrigado a todos, isso foi muito útil! @avickers abordou perfeitamente minha pergunta, mas a observação de @bluedev foi muito acertada. Embora eu não vá com sua abordagem nesse @chrisknoll , muito obrigado por compartilhá-lo, foi muito inspirador.

Muito obrigado

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mcarpenterjr picture mcarpenterjr  ·  3Comentários

azaslonov picture azaslonov  ·  3Comentários

cervengoc picture cervengoc  ·  4Comentários

priyank-eschool picture priyank-eschool  ·  7Comentários

brunolau picture brunolau  ·  8Comentários