Estou criando uma funcionalidade em uma página da web que o usuário pode executar várias vezes. Por meio da ação do usuário, um objeto / modelo é criado e aplicado ao HTML usando ko.applyBindings ().
O HTML vinculado a dados é criado por meio de modelos jQuery.
Por enquanto, tudo bem.
Quando repito esta etapa criando um segundo objeto / modelo e chamo ko.applyBindings (), encontro dois problemas:
- A marcação mostra o objeto / modelo anterior, bem como o novo objeto / modelo.
- Um erro de javascript ocorre relacionado a uma das propriedades no objeto / modelo, embora ainda seja renderizado na marcação.
Para contornar esse problema, após a primeira passagem, chamo .empty () do jQuery para remover o HTML modelado que contém todos os atributos de vinculação de dados, de modo que não esteja mais no DOM. Quando o usuário inicia o processo para a segunda passagem, o HTML vinculado a dados é adicionado novamente ao DOM.
Mas, como eu disse, quando o HTML é adicionado novamente ao DOM e vinculado ao novo objeto / modelo, ele ainda inclui dados do primeiro objeto / modelo e ainda recebo o erro JS que não ocorre durante a primeira passagem.
A conclusão parece ser que Knockout está mantendo essas propriedades vinculadas, mesmo que a marcação seja removida do DOM.
Então, o que estou procurando é um meio de remover essas propriedades associadas do Knockout; dizendo ao nocaute que não há mais um modelo observável. Existe uma maneira de fazer isso?
EDITAR
O processo básico é que o usuário carregue um arquivo; o servidor responde com um objeto JSON, o HTML vinculado a dados é adicionado ao DOM e o modelo de objeto JSON é vinculado a este HTML usando
mn.AccountCreationModel = new AccountViewModel(jsonData.Account);
ko.applyBindings(mn.AccountCreationModel);
Depois que o usuário fez algumas seleções no modelo, o mesmo objeto é postado de volta no servidor, o HTML vinculado a dados é removido do DOM e eu tenho o seguinte JS
mn.AccountCreationModel = null;
Quando o usuário deseja fazer isso mais uma vez, todas essas etapas são repetidas.
Receio que o código esteja muito "envolvido" para fazer uma demonstração do jsFiddle.
init
função na qual você passa os dados a serem aplicados?