Estoy tratando de procesar la siguiente knock-out.
<!-- ko with: address-->
<!-- ko if: address1-->
<span style="display : block">
<span data-bind="varchar : address1"></span>
</span>
<span style="display : block">
<span data-bind="varchar : address2"></span>
</span>
<!-- /ko -->
<!-- /ko -->
El problema es que incluso si la dirección del objeto que está presente, no puede contener la dirección 1 parámetro.
Me gustaría knock-out para no hacer el anidada se extiende si el parámetro ‘1’ es nulo.
Actualmente, el siguiente error se produce:
Unable to parse bindings. Message: ReferenceError: address1 is not defined;
Cualquier ayuda la agradezco mucho.
- En más pruebas del código anterior funciona realmente. Debe haber sido un fantasma en la máquina.
- Hay una diferencia entre el indefinido y null. Tu pregunta original indica que
address1
no estaba definida. Ahora, parece que se hanaddress1
definido, pero su valor es null.
No es sólo un caso de mover el segundo si?
Parece que necesita ver a su viewModel y direcciones de cómo se relacionan entre sí. Puedo hacer que en la muestra de knock-out de la página sin problemas:
Si utiliza
<!-- ko if: $data.address1 -->
, entonces no va a error siaddress1
es indefinido.Si
address1
no más tarde poblado, no se actualizará la interfaz de usuario, aunque (address1
necesita ser un observable originalmente).Tuve un caso donde tenía una plantilla de dirección se llama desde diferentes lugares.
Mi ‘país’ nombre del campo de datos era a veces
countryName
y a vecescountryDesc
.Acabo de cambiar la plantilla para este:
De esta manera se aprovecha el hecho de que si uso
$data
no error (como se ha señalado por RP Niemeyer)<!-- ko: if: -->
respuesta, esto debe ser la respuesta. Sencillo, limpio, y lo más importante es que permite establecer un valor cuando la variable no existe (a diferencia de laif
que sólo le permite no mostrar nada si la variable no existe).:empty
selector css que puede ser utilizado para ocultar el div si vacía, así que un poco más o menos chapucero dependiendo de cómo se mire.La causa de este comportamiento podría ser la inicial de los datos de su «dirección» observables.
Si está inicializando su viewmodel de esta manera:
entonces tanto la «dirección» y «1» no están definidos.
Una solución sería comprobar los datos en el principio del bloque envolviendo el código en un «ko si» declaración», de esta manera: