Dank dieser tutorial konnte ich einen KnockOut-Bindungs-Handler für Googles DataTable erstellen. Dies ist meine Bindung Handler, so weit:Erstellen von erweiterten KnockOut-Bindungs-Handler für google.visualization.datatable
ko.bindingHandlers.dataTable = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var table = new google.visualization.Table(element);
ko.utils.domData.set(element, "dataTable", table);
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var value = ko.unwrap(valueAccessor());
// Get options:
var options = allBindings.get("tableOptions") || {};
// Default options:
options.width = options.width || "200px";
options.height = options.height || "200px";
options.showRowNumber = options.showRowNumber || false;
// Get events:
var onSelected = allBindings.get("select") || false;
if (onSelected) {
$(element).on("select", function(event, ui) {
valueAccessor()(ui.value);
});
}
var table = ko.utils.domData.get(element, "dataTable");
table.draw(value, options);
}
};
Das ist mein HTML-Teil:
<div data-bind="dataTable: $root.getData(), tableOptions: {width: '100%',height: '200px', 'allowHtml': true, 'cssClassNames': {'selectedTableRow': 'orange-background'} }"></div>
Bisher bekomme ich eine Tabelle mit festen Header, die ganz gut funktioniert. Nun möchte ich den Binding-Handler erweitern, um auf das 'select row' -Ereignis zu reagieren. Ich versuchte dies mit der // Get events
Abschnitt in meinem Handler, aber das funktioniert nicht.
In meinem HTML ich hinzufügen select: $root.selectedRow(),
In meiner Funktion selectedRow()
ich eine console.log("In selectedRow")
setzen. Wenn ich die Seite lade, sehe ich selectedRow
wird für jede Zeile aufgerufen, aber wenn ich auf eine Zeile klicke, wird sie nicht aufgerufen.
Die Zeile, deren Hintergrund in Orange geändert wurde, fügt Google die selectedTableRow
Klasse hinzu.
Wie wird das ausgewählte Ereignis umgebrochen/gebunden?
Haben Sie den Ereignis-Listener versucht, indem mit 'google.visualization.events.addListener (Tabelle, 'wählen', select); '? – user3297291
Meinst du "draußen" KnockOut? Auf meiner Seite habe ich mehrere Tabellen. Meine Tabellen sind eng. Wenn ich auf eine Zeile klicke, möchte ich die vollständigen Zeilendaten in einem Div unterhalb der Tabelle anzeigen. Ich muss also wissen, in welcher Tabelle ich bin und welche Zeile ich ausgewählt habe. Um das div zu füllen, benutze ich ein Observable, ich muss nur wissen, wie man dieses Observable füllt. –
Ich meinte in Ihrem Binding-Handler, anstatt der '$ (Element) .on (" Select ", ...'. – user3297291