function koComputed()

in ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java [314:361]


          function koComputed(index, name, readOnly, value) {
            function activeGetter() {
                return value;
            }
            var trigger = ko['observable']()['extend']({'notify':'always'});
            var bnd = {
              'read': function() {
                trigger();
                var r = activeGetter();
                return normalValue(r);;
              },
              'owner': ret
            };
            if (!readOnly) {
              function write(val) {
                var self = ret['ko4j'];
                if (!self) return;
                var model = val ? val['ko4j'] : null;
                self.@org.netbeans.html.ko4j.Knockout::setValue(ILjava/lang/Object;)(index, model ? model : val);
              };
              bnd['write'] = write;
            };
            var cmpt = ko['computed'](bnd);
            cmpt['valueHasMutated'] = function(val) {
              if (arguments.length === 1) {
                value = val;
                trigger(val);
              } else {
                var self = ret['ko4j'];
                if (self) {
                  var futureValue = self.@org.netbeans.html.ko4j.Knockout::getValue(I)(index);
                  Promise.resolve(futureValue).then(function(val, e) {
                    if (e) {
                      alert("Cannot call getValue on " + self + " prop: " + name + " error: " + e);
                    } else {
                      if (value != val) {
                        resolvePromises(val, function() {
                            value = val;
                            trigger(val);
                        });
                      }
                    }
                  });
                }
              }
            };
            ret[name] = cmpt;
          }