Estoy tratando de extraer las propiedades únicas de un knockout.js observableArray de los objetos, para rellenar un menú desplegable. Siendo nuevo en octavos de final, realmente estoy luchando con esto!

Quiero para iterar a través de una lista de contactos, y rellenar un menú desplegable con un valor único de cada persona objeto dentro de la observableArray. Así que en mi ejemplo de código siguiente, quiero llenar mi menú desplegable con una lista de la gente ‘tipo’ de la familia, amigo, etc.

Buscando en Google, he encontrado una función similar, pero no se devuelve ningún valor, incluso si yo consola.registro de los resultados?

//dummy data more rows in actual code...

var people = [
    { name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "[email protected]", type: "family" },
    { name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "[email protected]", type: "friend" }
];


function ContactsViewModel(people) {

    var self = this;
    self.contacts = ko.observableArray(people);

    self.uniqueSelect = ko.dependentObservable(function() {
        return( ko.utils.arrayGetDistinctValues(self.contacts().type).sort());
    }, self);
};

ko.applyBindings(new ContactsViewModel(people));

Y plantilla HTML

<p>Show me: <select data-bind="options: ContactsViewModel.uniqueSelect"></select></p>

Cualquier ayuda es apreciada, como un noob estoy perdido! Gracias

duplicado + mejor respuesta: stackoverflow.com/questions/14437849/…

OriginalEl autor Joe | 2012-11-13

1 Comentario

  1. 12

    Usted no puede utilizar este tipo de construcciones self.contacts().type. Usted debe obtener la matriz de tipos primero y, a continuación, llamar a Distinct función:

    self.uniqueSelect = ko.dependentObservable(function() {
        var types = ko.utils.arrayMap(self.contacts(), function(item){ return item.type})
        return ko.utils.arrayGetDistinctValues(types).sort();
    });

    Aquí está trabajando violín: http://jsfiddle.net/VxT5Y/

    OriginalEl autor Artem Vyshniakov

Dejar respuesta

Please enter your comment!
Please enter your name here