8

ドロップメニューにデータを入力するために、オブジェクトのknockout.jsobservableArrayから一意のプロパティを抽出しようとしています。ノックアウトに慣れていないので、私はこれに本当に苦労しています!

連絡先リストを繰り返し処理し、observableArray内の各personオブジェクトからの一意の値をドロップメニューに入力します。したがって、以下のコード例では、ドロップメニューに「タイプ」(家族、友人など)のリストを入力したいと思います。

Googleを見ると、同様の関数が見つかりましたが、結果をconsole.logに記録しても、値が返されません。

//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: "anemail@me.com", type: "family" },
    { name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", 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));

そしてHTMLテンプレート

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

どんな助けでもありがたいです、初心者として私は迷子になっています!ありがとう

4

1 に答える 1

13

このような構造は使用できませんself.contacts().type。最初に型の配列を取得してから、Distinct関数を呼び出す必要があります。

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

ここにフィドルが働いています:http://jsfiddle.net/VxT5Y/

于 2012-11-13T11:08:58.063 に答える