Estoy un poco confundido. Recibo "ReferenceError: showActiveOnly no está definido" cuando intento llamar a "if: (showActiveOnly)" en una etiqueta td, pero inmediatamente debajo coloqué la etiqueta ap como una prueba y tengo su enlace de datos establecido en "texto : showActiveOnly ", y esto se lee find. ¿Qué me estoy perdiendo?

var viewmodel = {
            userList:UserListViewModel(users),
            showActiveOnly : ko.observable(true)
        }
        ko.applyBindings(viewmodel);

<div>
    <div>
        <input type="checkbox" data-bind="checked: showActiveOnly" /><p data-bind="text:$data.showActiveOnly"></p>

        <table >
            <thead>
                <tr data-bind="click: sortTable">
                    <th>
                        User Name
                    </th>
                </tr>
            </thead>
            <tbody data-bind="foreach: currentPage ">
                <tr data-bind="if:(showActiveOnly)">
                    <p data-bind="text:showActiveOnly"></p>
                    <td data-bind="text: Username" style="width: 10%;"></td>
                </tr>
            </tbody>
        </table>

Error: no detectado error: no se pueden analizar los enlaces. Mensaje: ReferenceError: showActiveOnly no está definido; valor vinculante: if (showActiveOnly)

0
Clinton Cochrane 16 oct. 2018 a las 00:43

2 respuestas

La mejor respuesta

Respuesta cambiada un poco. Creo que el problema aquí es el alcance / contexto. Pero también tengo una sugerencia de lo que creo que le gustaría lograr con esta tabla. Aquí se demostró el uso de elemento virtual en su lugar y foreach en tr elemento en lugar de tbody.

Ejemplo de lo que creo que quieres. Eso es si cada currentPage tiene un showActiveOnly observable. Si showActiveOnly no está presente en cada currentPage, puede usar $ parent, $ parent [index] o $ root para obtener el alcance correcto para ese observable. Como se describe aquí https://knockoutjs.com/documentation/binding-context.html

<tbody>
    <tr data-bind="foreach: currentPage ">
        <!-- ko if: showActiveOnly -->
        <p data-bind="text:showActiveOnly"></p>
        <td data-bind="text: Username" style="width: 10%;"></td>
        <!-- /ko -->
    </tr>
</tbody>
-1
nios 16 oct. 2018 a las 08:11

Prueba esto:

 <tbody data-bind="foreach: currentPage ">
                <tr data-bind="if: $parent.showActiveOnly">
                    <p data-bind="text:showActiveOnly"></p>
                    <td data-bind="text: Username" style="width: 10%;"></td>
                </tr>
            </tbody>

Ya que está utilizando foreach, está cambiando el contexto de los enlaces contenidos. Es por eso que debe usar $ parent o $ root. Busque información de contextos de datos knockout en el sitio knockoutJS, ¡contiene cada pequeño detalle!

0
MKougiouris 16 oct. 2018 a las 07:55