¿Cómo usar el mapeo de eliminación?

He aplicado enlaces al siguiente modelo de vista.

var groupDeleteViewModel = {
        group: { Id: ko.observable(), Name: ko.observable(), Members: ko.observableArray() },
        load: function (item) {
            debugger

        },
        remove: function (item) {
            groupDeleteViewModel.group.Id(item.Id());
            groupDeleteViewModel.group.Name(item.Name());
            groupDeleteViewModel.group.Members(item.Members());
            $("#groupDelete").show();
        },
        cancel: function () {
            $("#groupDelete").hide();
        }
    }

la función eliminar carga la vista con los datos que se han pasado en ít a la función de eliminación.

<div id="groupDelete" class="pop-window filter-view">
    <h2>
        Delete Group
    </h2>
    <table>
        <tr>
            <th>
                Name
            </th>
            <td>
                <span data-bind="text:group.Name" />
            </td>
        </tr>
        <!--ko foreach: group.Members-->
        <tr>
            <th>
            </th>
            <td>
                <div data-bind="text:Name" class="grey-border">
                </div>
            </td>
            <td>
            </td>
        </tr>
        <!--/ko-->
    </table>
    <span class="centeralign">
        <input type="button" value="Delete" data-bind="click: remove" class="delete" />
        <input type="button" value="Cancel" data-bind="click: cancel" />
    </span>
</div>

No quiero seguir mapeando cada elemento de ít a cada elemento de groupDeleteViewmodel.group. Lo he hecho en muchos otros lugares también en el código, lo que ha hecho que el código sea realmente complicado. Quiero usar el complemento ko.mapping para hacer lo mismo.

Hasta ahora lo que he intentado es -

remove:function (item){
            var data = ko.mapping.toJS(item);
            ko.mapping.fromJS(data, groupDeleteViewModel.group);
            $("#groupDelete").show();
}

Pero esto simplemente no funciona. Realmente no sé por qué. Debería haber funcionado idealmente. ¿Alguien puede decir cuál es la forma correcta de usar ko.mapping en tal caso?

Gracias.

preguntado el 28 de julio de 12 a las 09:07

1 Respuestas

El complemento de mapeo está buscando datos de mapeo que ya están presentes en groupDeleteViewModel.group, pero no lo encuentra, porque no inicializaste groupDeleteViewModel.group usando el complemento de mapeo. Entonces, en lugar de inicializar el grupo como lo hiciste:

group: { Id: ko.observable(), Name: ko.observable(), Members: ko.observableArray() }

inicialícelo usando el complemento de mapeo:

group: ko.mapping.fromJS({ Id: undefined, Name: undefined, Members: [] })

Y este soy yo jugueteando con tu código: violín

Respondido 28 Jul 12, 14:07

¡Eress el mejor! gracias una tonelada. Me pregunto si esto también está en su sitio web. - tusharmath

Ellos dicen: To create a view model via the mapping plugin, replace the creation of viewModel in the code above with the ko.mapping.fromJS function y entonces: Then, every time you receive new data from the server, you can update all the properties on viewModel in one step by calling the ko.mapping.fromJS function again. Probablemente deberían ser más explícitos al respecto: antichoque

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.