knockout.js の computed の注意

以下のような、HTMLとスクリプト

<input type="text" data-bind="value: msg1" />
<input type="text" data-bind="value: msg2" />
<span data-bind="text: res"></span>

と、

$(function(){
   var ViewModel = function(){
      this.msg1 = ko.observable('111');
      this.msg2 = ko.observable('222');
      this.res = ko.computed(function(){
         return this.msg1() + ":" + this.msg2();
      }, this);
   };

   var viewModel = new ViewModel();
   ko.applyBindings(viewModel);
});

f:id:posturan:20171220122350j:plain
で、input の valueが変化したときに、span の内容が変化するものを作ると、crome , edge はきちんと動くが
IE11では valueが変化したときに動かない。
computed に、通知をいつでも=always にしないとならない。

      this.res = ko.computed(function(){
         return this.msg1() + ":" + this.msg2();
      }, this).extend({ notify: 'always' });

書き直すと以下のとおり。

$(function(){
   var ViewModel = function(){
      this.msg1 = ko.observable('111');
      this.msg2 = ko.observable('222');
      this.res = ko.computed(function(){
         return this.msg1() + ":" + this.msg2();
      }, this).extend({ notify: 'always' });
   };

   var viewModel = new ViewModel();
   ko.applyBindings(viewModel);
});