Basierend auf diese bestehende Antwort habe ich etwas Ähnliches erreicht wie Ihre ursprünglichen Absichten:
function extendBinding(ko, container, viewModel) {
ko.applyBindings(viewModel, container.children()[container.children().length - 1]);
}
function yourBindingFunction() {
var container = $("#menu");
var inner = $("<select name='list' data-bind='options: listItems'></select>");
container.empty().append(inner);
extendBinding(ko, container, {
listItems: ["item1", "item2", "item3"]
});
}
Hier ist ein JSFiddle zum Spielen.
Seien Sie gewarnt, sobald das neue Element Teil des Dom ist, können Sie es nicht mehr mit einem Aufruf von ko.applyBindings
- Deshalb verwende ich container.empty()
. Wenn Sie das neue Element beibehalten und es sich ändern lassen wollen, wenn sich das Ansichtsmodell ändert, übergeben Sie eine Observable an die viewModel
Parameter des extendBinding
Methode.