code: func (o *Option) AddComputed(name string, getter func(vm *ViewModel) interface{}, setter ...func(vm *ViewModel, val *js.Object)) {
  	conf := make(map[string]js.M)
  	conf[name] = make(js.M)
  	fnGetter := js.MakeFunc(func(this *js.Object, arguments []*js.Object) interface{} {
  		vm := newViewModel(this)
  		return getter(vm)
  	})
  	conf[name]["get"] = fnGetter
  	if len(setter) > 0 {
  		fnSetter := js.MakeFunc(func(this *js.Object, arguments []*js.Object) interface{} {
  			vm := newViewModel(this)
  			setter[0](vm, arguments[0])
  			return nil
  		})
  		conf[name]["set"] = fnSetter
  	}
  	// using mixin here
  	o.addMixin("computed", conf)
  }
docs: // AddComputed set computed data