Пример #1
0
        /// <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);
            });
        }
Пример #2
0
        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;
        }
Пример #3
0
        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
                );
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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);
            }
        }