Knockout - jQuery event handling

by Pratik Bhattachary

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-debug.js"></script>
<input type="text" placeholder="Add Tags" data-bind="value: tagToAdd, valueUpdate: 'afterkeydown'"/>
<button data-bind="{click: addTag}">+</button>

<div data-bind="template: 'tagsTemplate'"></div>

<script id="tagsTemplate" type="text/html">
    <ul data-bind="foreach: tags">
        <li>
            <span data-bind="text: name"></span>
            <button class="tag-delete">Delete</button>
        </li>
    </ul>
</script>

JavaScript

$(function() {
    var data=[{name: "Pratik"}, {name: "Vaun"}, {name: "Pradeep"}];
    var viewModel = {
        tags: ko.observableArray(data),
        tagToAdd: ko.observable(""),
        addTag: function() {
            this.tags.push({name: this.tagToAdd()});
            this.tagToAdd('');
        }
    };
    
    $(document).on('click', '.tag-delete', function() {
        var itemToRemove = ko.dataFor(this);
        viewModel.tags.remove(itemToRemove);
    });
    
    ko.applyBindings(viewModel);
});