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 han address1 definido, pero su valor es null.
InformationsquelleAutor Chin | 2012-02-28

4 Comentarios

  1. 8

    No es sólo un caso de mover el segundo si?

    <!-- ko with: address -->
    <span style="display : block">
    <!-- ko if: address1 -->
    <span data-bind="varchar : address1"></span>
    <!-- /ko -->
    </span>
    <span style="display : block">
    <span data-bind="varchar : address2"></span>
    </span>
    <!-- /ko -->

    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:

    <h1 data-bind="text: city"> </h1>
    <p data-bind="with: coords">
        <!-- ko if: latitude -->
        Latitude: <span data-bind="text: latitude"> </span>,
        <!-- /ko -->
        Longitude: <span data-bind="text: longitude"> </span>
    </p>
    • gracias, estoy comprobando para 1 como la de los demás también será nulo si 1 es.
  2. 90

    Si utiliza <!-- ko if: $data.address1 -->, entonces no va a error si address1 es indefinido.

    Si address1 no más tarde poblado, no se actualizará la interfaz de usuario, aunque (address1 necesita ser un observable originalmente).

    • Upvoted porque es muy importante que 1 es un observable si la interfaz de usuario está diseñado para ser actualizado
    • Esta debe ser la respuesta.
    • parece como <!- ko si: $data.1 –> falta un «-«, lo correcto es <!– ko si: $data.1 –>
  3. 6

    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 veces countryDesc.

    Acabo de cambiar la plantilla para este:

     <div data-bind="text: $data.countryName || $data.countryDesc"></div>

    De esta manera se aprovecha el hecho de que si uso $data no error (como se ha señalado por RP Niemeyer)

    • Olvidar el <!-- 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 la if que sólo le permite no mostrar nada si la variable no existe).
    • Esta no es realmente una buena respuesta general, si usted espera que nunca se vacía (porque va a dejar un vacío <div></div> que es bastante torpe). Yo desde que aprendió acerca de la :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.
  4. 0

    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:

    this.address = ko.observableArray();

    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:

    <!-- ko if: $data --> <br/>
    <br/>
    <span style="display : block"><br/>
    <span data-bind="varchar : address1"></span><br/>
    </span><br/>
    <span style="display : block"><br/>
    <span data-bind="varchar : address2"></span><br/>
    </span><br/>
    <br/>
    <!-- /ko -->

Dejar respuesta

Please enter your comment!
Please enter your name here