Abstract.TimedObserver.onTimerEventメソッド改修検討
前述したように、Form.Element.Observerでは、multiple指定のselectタグが扱えません。根本的な原因は、継承するAbstract.TimedObserverクラスのonTimerEventメソッドで、直前の値と現在の値の比較に、単純に不等号を用いていることです。改修案として、「直前の値と現在の値の比較時、値が配列の場合は、内容が同一かをチェックするロジック」を追加したものを提示します。
【改修案】Abstract.TimedObserver.onTimerEventメソッド onTimerEvent: function() { var isChanged = false; var value = this.getValue(); if (this.lastValue instanceof Array && value instanceof Array){ if(this.lastValue.length != value.length || this.lastValue.any(function(last, i){return (last != value[i]);})){ isChanged = true; } }else{ if (this.lastValue != value) { isChanged = true; } } if(isChanged){ this.callback(this.element, value); this.lastValue = value; } }
これでselect-multipleも扱えるようになります。また、Form.Element.Observer.getValueメソッドで使用しているForm.Element.getValueメソッドを、前述Form.Element.getValueメソッドで提示した改修案の追加メソッドForm.Element.getValue2に置き換えることもできると思います。そうすると、複数の同一名要素も監視できるようになります。