2016-11-26 5 views
0

Hallo ich habe eine Anwendung, die Daten von einer Seite zu einem anderen mit vordefinierten Datenobjekte/Arrays zugewiesen wird, ist mein Problem, ich kann sehen, observableArray einen Wert und dann es dreht sich die SelectedPeople beobachtbar zu undefiniert.Knockout wählen Bindungen überschreiben mein vordefiniertes observable Objekt

Ich habe bis zum Datenbindungsmarkup beseitigt, als wenn ich entferne, dass mein beobachtbares Array nichts zu undefiniert setzt.

Hier ist, wie ich meine Observables/ObservableArray an die Elemente binde.

<select data-bind="options: ObservableArray.People, value: ObservableArray.SelectedPeople, optionsText: 'Name'"></select> 
  • ObservableArray.People = beobachtbare Array von Objekten - funktioniert einwandfrei und macht alle Drop-Down-Optionen

  • ObservableArray.SelectedPeople = beobachtbare

Beide haben die 'Name' Objekt definiert anzupassen die optionsText. Es funktioniert perfekt, wenn Daten von Grund auf neu ausgewählt werden, aber wenn ich versuche, vordefinierte Daten darin zu haben, wird das Observable.SelectedPeople Objekt als undefined gesendet, wenn es versucht zu laden.

Im Grunde hat meine Observable.SelectedPeople ein Objekt auf dem, was den Wert dieser Auswahl vordefinieren sollte und das Objekt 100% entspricht einer der Dropdown-Optionen ObservableArray.People. Ich brauche es nicht Observable.SelectedPeople auf undefiniert zu setzen und das Auswahlfeld aufzufüllen.

Kann jemand sehen, warum das passiert.

Dank

+0

Sie sollten den Wert überprüfen, die auf dem 'beobachtbare zugeordnet ist. SelectedPeople, nachdem Sie einen Wert aus dem Dropdown ausgewählt haben. Dieser Wert sollte eine "Eigenschaft" sein, die in den Objekten definiert ist, die an das Dropdown-Menü gebunden sind. Sie sollten den Wert dieser Eigenschaft auf "Observable.SelectedPeople" schieben. – gkb

+0

Observable.SelectedPeople hat einen Standardwert, der die Observable.People auf die angegebene setzen [email protected] gkb – user4058171

+0

Schauen Sie sich diesen Beitrag an und sehen Sie, wie das Attribut 'optionsValue' im Auswahlsteuerelement http://stackoverflow.com/questions/13587230/knockout-bind-a-key-value-object-to-dropdown verwendet wurde – gkb

Antwort

1

... und das Objekt 100% entspricht einer der Drop-Down-ObservableArray.People Optionen.

Diese Linie macht mich verdächtiger, ob Sie eine tatsächliche Referenz verwenden auf das Objekt, oder einfach nur ein Objekt, das ähnlich ist.

Zum Beispiel wird dies nicht Arbeit:

var options = [{ id: 1 }, { id: 2 }, { id: 3}]; 
var selectedOption = ko.observable({ id: 1 }); 

Knockout führt nicht irgendeine Art von deepEquals Vergleich; Wenn es ein nicht primitives Objekt sieht, führt es eine Referenzprüfung durch. options[0] !== { id: 1 }, so ist diese erste Auswahl nicht gültig.

Der folgende Code wird Arbeit, weil Sie ein tatsächliches Objekt aus dem Array verwenden Sie in Ihrem select-Element verwenden:

var options = [{ id: 1 }, { id: 2 }, { id: 3}]; 
var selectedOption = ko.observable(options[0]); 
Verwandte Themen