EDIT: Es scheint, dass dies seit Version 2.3 IIRC nicht mehr funktioniert, wie von LosManos
Mit myViewModel[newObservable] = ko.observable('') können Sie eine weitere Observable zu Ihrem View-Modell hinzufügen.
Danach rufen Sie erneut ko.applyBindings auf.
Hier ist eine einfache Seite, auf der ich dynamisch Absätze hinzufüge und das neue Ansichtsmodell und die Bindungen funktionieren einwandfrei.
// myViewModel starts only with one observable
var myViewModel = {
paragraph0: ko.observable('First')
};
var count = 0;
$(document).ready(function() {
ko.applyBindings(myViewModel);
$('#add').click(function() {
// Add a new paragraph and make the binding
addParagraph();
// Re-apply!
ko.applyBindings(myViewModel);
return false;
});
});
function addParagraph() {
count++;
var newObservableName = 'paragraph' + count;
$('<p data-bind="text: ' + newObservableName + '"></p>').appendTo('#placeholder');
// Here is where the magic happens
myViewModel[newObservableName] = ko.observable('');
myViewModel[newObservableName](Math.random());
// You can also test it in the console typing
// myViewModel.paragraphXXX('a random text')
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
<div id="placeholder">
<p data-bind="text: paragraph0"></p>
</div>
<a id="add" href="#">Add paragraph</a>