Weird Behavior Of Knockout

Discussion in 'JavaScript' started by senglory, Oct 9, 2016.

  1. #1
    <div id="ctlAlert" class="alert error-message">
    <ul id="ctlAlertUL" data-bind="foreach: allErrors">
    <li data-bind="text: $data" class="text-danger"></li>
    </ul>
    </div>
    
    <button id="btnErr1">Err1</button>
    <button id="btnErr2">No ERR</button>
    HTML:
    Script part:
    <script>
    
    
            $(document).ready(function () {
    
    var ErrorsListModel = function (items) {
            var self = this;
            self.allErrors = ko.observableArray(items);
            self.hasErrors = ko.computed(function () {
                return self.allErrors().length > 0;
            });
        }
    
       
        $("#btnErr1").click(function (evt)
        {
    ko.cleanNode($("#ctlAlertUL")[0]);
          var rt = '["msg1", "msg2"]';
          var ve = $.parseJSON(rt);
          ko.applyBindings(new ErrorsListModel(ve), $("#ctlAlertUL")[0]);
        });
    
    
        $("#btnErr2").click(function (evt)
        {
    ko.cleanNode($("#ctlAlertUL")[0]);
          var rt = '[]';
          var ve = $.parseJSON(rt);
          ko.applyBindings(new ErrorsListModel(ve), $("#ctlAlertUL")[0]);
        });
    
    });
    
        </script>
    Code (JavaScript):
    1. When I click many times on Err1 I see MSG multiplied twice upon each click

    2. When I click on NoERR I have ctlAlertUL clean, but when I click on Err1 after that I see no new MSG added

    This makes me frustrating. What I'm doing wrong ?
     
    senglory, Oct 9, 2016 IP