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
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/template-binding.html
Role para baixo até a Nota 5.
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:
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
Comentários muito úteis
https://knockoutjs.com/documentation/template-binding.html
Role para baixo até a Nota 5.