예제 #1
0
        internal async Task UpdateJavascriptObjects(bool debugMode)
        {
            await RunInJavascriptContext(async() =>
            {
                RegisterJavascriptHelper();

                Context.InitOnJsContext(debugMode);
                _SessionInjector = Context.JavascriptSessionInjector;

                _BuilderStrategy = _BuilderStrategyFactory.GetStrategy(Context.WebView, _SessionCache, Context.JavascriptFrameworkIsMappingObject);
                _BuilderStrategy.UpdateJavascriptValue(JsValueRoot);

                IJavascriptObject res;
                if (Context.JavascriptFrameworkIsMappingObject)
                {
                    res = await InjectInHtmlSession(JsValueRoot);
                }
                else
                {
                    res = JsValueRoot.JsValue;
                }

                await _SessionInjector.RegisterMainViewModel(res);

                _IsLoaded = true;
            });
        }
예제 #2
0
 private void InitOnJavascriptContext(bool debugMode)
 {
     RegisterJavascriptHelper();
     Context.InitOnJsContext(debugMode);
     _SessionInjector = Context.JavascriptSessionInjector;
     _BuilderStrategy = _BuilderStrategyFactory.GetStrategy(Context.WebView, _SessionCache, Context.JavascriptFrameworkIsMappingObject);
     _BuilderStrategy.UpdateJavascriptValue(JsValueRoot);
 }
예제 #3
0
        private Task <IJSCSGlue> UpdateFromCSharpChanges(object newCSharpObject, Func <IJSCSGlue, BridgeUpdater> updaterBuilder)
        {
            CheckUIContext();

            var value = _JSObjectBuilder.Map(newCSharpObject);

            if (value == null)
            {
                return(null);
            }

            BridgeUpdater updater = null;

            using (var relisten = value.IsBasicNotNull()? null : ReListen())
            {
                updater = Update(() => updaterBuilder(value), relisten);
            }

            if (!_IsLoaded)
            {
                return(Task.FromResult(value));
            }

            return(RunInJavascriptContext(async() =>
            {
                _BuilderStrategy.UpdateJavascriptValue(value);

                if (_Context.JavascriptFrameworkIsMappingObject)
                {
                    await InjectInHTMLSession(value);
                }

                updater.UpdateOnJavascriptContext(_Context.ViewModelUpdater);
                return value;
            }));
        }
예제 #4
0
 private void UpdateOnJavascriptContext(BridgeUpdater updater, IJsCsGlue value)
 {
     _BuilderStrategy.UpdateJavascriptValue(value);
     updater.UpdateOnJavascriptContext(Context.ViewModelUpdater);
 }
 private void UpdateJavascriptValue(IJsCsGlue value)
 {
     _BuilderStrategy.UpdateJavascriptValue(value);
 }