Ich benutze knockout js und das gewählte Plugin (https://github.com/harvesthq/chosen) zu versuchen und eine gut aussehende Multi-Select zu machen.Knockout JS und ausgewählte Multiselect funktioniert nicht
Ich habe verschiedene Möglichkeiten ausprobiert, aber kann die Multiselect nicht mit den Daten arbeiten, die ich verwende. Wenn ich auf die Mehrfachauswahl klicke, werden keine Werte angezeigt, obwohl die Optionsbindung die korrekten Daten enthält.
HTML:
<select multiple="multiple" data-bind="options: allCustomers,
selectedOptions: event().customers, optionsText: 'name',
optionsValue: 'id', chosen: true " ></select>
vereinfachte Version der View-Modell:
function Event()
{
this.customers = ko.observableArray();
};
//for chosen plugin
ko.bindingHandlers.chosen = {
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
$(element).chosen();
}
}
function ViewModel()
{
this.event = ko.observable(new Event());
this.allCustomers = ko.observableArray();
};
var viewModel = new ViewModel();
$.getJSON("/get_json", function(data)
{
for (var c = 0; c < data.customers.length; c++)
{
viewModel.allCustomers.push(data.customers[c]);
}
});
ko.applyBindings(viewModel);
PHP:
function get_json()
{
$eventData = array(
'customers' => array(array('name' => 'Bob', 'id' => 1), array('name' => 'John', 'id' => 2)),
'moreData' => array(),
'evenMoreData' => array()
);
echo json_encode($eventData);
}
Dies zeigt den gewählten Stil Auswahlfeld, aber wenn ich in es klicken, Keine Optionen erscheinen.
Wenn ich ein lokales JS-Array im View-Modell für die Kunden erstellen und an allCustomers übergeben, funktioniert die Multiselect korrekt (siehe meine jsfiddle), so dass es etwas mit dem Abrufen von Daten vom Server zu tun hat, aber ich war starrt das eine Weile an und kann das Problem nicht sehen!
viel Jede Hilfe
Wenn Sie 'console.log()' das Array, passt es die lokale Testversion? Sie haben keine JavaScript-Fehler auf der Seite? – Tyrsius
Korrekt, keine Fehler und das Array stimmt mit der lokalen Testversion überein. – peacemaker
Es könnte sein, dass der Async-Aufruf beginnt, dann werden die Bindungen angewendet, dann kehrt der Async zurück und wird zum View-Modell weitergeleitet. Wenn ich neue Kunden in das Array schiebe, werden sie nicht in der Auswahl angezeigt, was mir sagt, dass das gewählte Update nach der ersten Bindung nicht funktioniert. – Tyrsius