/// <summary> /// This method binds a getter and setter function to a specific field on a JavaScript object. /// </summary> /// <param name="name">The name of the field.</param> /// <param name="getter">The function to invoke when the field is read.</param> /// <param name="setter">The function to invoke when the field is written to.</param> public void AddProperty(string name, JavaScriptNativeFunction getter, JavaScriptNativeFunction setter) { _scope.Run(() => { var get = _binder.BindFunction(getter); var set = _binder.BindFunction(setter); var descriptor = JavaScriptValue.CreateObject(); descriptor.SetProperty(JavaScriptPropertyId.FromString("get"), get, true); descriptor.SetProperty(JavaScriptPropertyId.FromString("set"), set, true); _value.DefineProperty(JavaScriptPropertyId.FromString(name), descriptor); }); }
private static void WireUp(JavaScriptValue constructor, System.Type type, JavaScriptValue prototype) { string name = type.ToString(); typeNameToType[name] = type; // So that we can look up c# types by JS constructors, define a name property containing // the full name from type.ToString() that we can take off and put back into stringToType. JavaScriptValue propertyDescriptor = JavaScriptValue.CreateObject(); propertyDescriptor.SetProperty("value", JavaScriptValue.FromString(name)); constructor.DefineProperty("name", propertyDescriptor); typeNameToPrototype[name] = prototype; }
public static void DefineGetter( JavaScriptValue obj, string keyName, Func <JavaScriptValue[], JavaScriptValue> callback ) { JavaScriptValue descriptor = JavaScriptValue.CreateObject(); descriptor.SetProperty( "get", FunctionAllocation.CreateFunction(callback) ); obj.DefineProperty( keyName, descriptor ); }
void AssignPropertyProc(JavaScriptValue setTo, PropertyInfo[] props) { var getpropid = JavaScriptPropertyId.FromString("get"); var setpropid = JavaScriptPropertyId.FromString("set"); foreach (var info in props) { if (info.IsSpecialName) { continue; } var desc = JavaScriptValue.CreateObject(); var id = JavaScriptPropertyId.FromString(info.Name); var proxy = new PropertyProxy(info); desc.SetProperty(getpropid, JavaScriptValue.CreateFunction(PropertyProxy.PropertyGetterDg, GCHandle.ToIntPtr(proxy.thisPtr)), true); desc.SetProperty(setpropid, JavaScriptValue.CreateFunction(PropertyProxy.PropertySetterDg, GCHandle.ToIntPtr(proxy.thisPtr)), true); setTo.DefineProperty(id, desc); propertyWrappers.Add(proxy); } }
void AssignFieldProc(JavaScriptValue setTo, FieldInfo[] fields) { var getpropid = JavaScriptPropertyId.FromString("get"); var setpropid = JavaScriptPropertyId.FromString("set"); foreach (var f in fields) { if (f.IsSpecialName) { continue; } var desc = JavaScriptValue.CreateObject(); var id = JavaScriptPropertyId.FromString(f.Name); var proxy = new FieldProxy(f); desc.SetProperty(getpropid, JavaScriptValue.CreateFunction(FieldProxy.FieldGetterDg, GCHandle.ToIntPtr(proxy.thisPtr)), true); desc.SetProperty(setpropid, JavaScriptValue.CreateFunction(FieldProxy.FieldSetterDg, GCHandle.ToIntPtr(proxy.thisPtr)), true); setTo.DefineProperty(id, desc); fieldWrappers.Add(proxy); } }
void AssignToObject(JavaScriptValue obj) { if (children == null) { return; } var getpropid = JavaScriptPropertyId.FromString("get"); var setpropid = JavaScriptPropertyId.FromString("set"); foreach (var kv in children) { var n = kv.Value; var t = n.type; var prop = JavaScriptPropertyId.FromString(n.name); var desc = JavaScriptValue.CreateObject(); var proxy = new PropertyProxy(n); propertyProxies.Add(proxy); desc.SetProperty(getpropid, JavaScriptValue.CreateFunction(PropertyProxy.PropertyGetterDg, GCHandle.ToIntPtr(proxy.thisPtr)), true); desc.SetProperty(setpropid, JavaScriptValue.CreateFunction(PropertyProxy.PropertySetterDg, GCHandle.ToIntPtr(proxy.thisPtr)), true); obj.DefineProperty(prop, desc); } }