zoukankan      html  css  js  c++  java
  • JS调用Silverlight方法拾遗

    在最近做的物联网项目中,需要利用封装过的Silverlight刻度控件显示温度,湿度,二氧化碳浓度等值。由于最新的数据是通过js ajax获取的,所以需要把这些数据传递给silverlight显示,这就涉及到js和silverlgiht交互的问题。由于这里我们需要通过js来调用silverlight方法,这里我就做一下调用说明。

    首先,在Silverlight项目中,我们把需要被JS调用的方法置为public类型,以便于公布方法。

    然后,在被调用方法上加上[ScriptableMember]属性说明,以便于让此方法支持外部调用。

            [ScriptableMember]
            public void InitTemperature(string airte="0",string airhi="0",string earthte="0",string earthhi="0",string ph="0")
            {
                var data = new DataNotify();
                data.MaxData = 30;
                data.MinData = -15;
                data.MinRange = -15;
                data.MaxRange = 75;
                data.CurrentData = double.Parse(airte);
                data.Title = "空气温度";
                data.Unit = "℃";
                data.ThemeSet = Theme.Red;
    
                var uc = new TemperatureControl(data);
                uc.Margin = new Thickness(-980, 0, 10, 10);
                Test.Children.Add(uc);
    
                //...........中间省略代码..........
    
                var data4 = new DataNotify();
                data4.MaxData = 10;
                data4.MinData = 0;
                data4.MinRange = 0;
                data4.MaxRange = 10;
                data4.CurrentData = double.Parse(ph);
                data4.Title = "酸碱度";
                data4.Unit = "PH";
                data4.ThemeSet = Theme.Yellow;
    
                var uc4 = new TemperatureControl(data4);
                uc4.Margin = new Thickness(683, 0, 10, 10);
                Test.Children.Add(uc4);
            }

    之后,在App.xaml中,需要对被调用的方法赋予对外公布的方法调用别名:

           private void Application_Startup(object sender, StartupEventArgs e)
            {
                var dict = e.InitParams;
                this.RootVisual = new MainPage(dict);
    
                HtmlPage.RegisterScriptableObject("LoadLatest",this.RootVisual);
            }

    从这里我们看出,我定义了一个别名为”LoadLastest”的方法名称,JS如果进行调用的时候,就会通过调用LoadLastest来触发InitTemperature方法。

    这样,我们的Silverlight端就配置完毕了,下面来看看网页端设置:

    首先,定义js方法:

            var slCtl = null;
            function pluginLoaded(sender, args) {
                slCtl = sender.getHost();
            }
            function CallSilverlight() {
                slCtl.Content.LoadLatest.InitTemperature(lineAirTeGO, lineAirHiGO, lineEarthTeGO, lineEarthHiGO, linePHGO);
            } 

    然后,在需要调用的地方,调用CallSilverlight即可。

    ======================================

    加一点不相干的东西。

    如果在页面上使用了easyui的combobox,如果silverlight和其挨得太近,那么当点击下拉列表的时候,列表会被silverlght给遮挡住,解决这个问题的方法就是在网页端加上这么一句:

       <!--解决菜单被silverlight盖住问题-->
       <param name="background" value="transparent" />
  • 相关阅读:
    怎么获取数组中的对象的某一项之和
    原型链
    js的事件循环(Eventloop) 机制/js的宏任务微任务执行顺序
    怎么替换数组中对象的属性
    求对象所有值的和
    sequelize中duplicating:false的使用
    WebSocket
    轮播

    ssl tsl
  • 原文地址:https://www.cnblogs.com/scy251147/p/4023765.html
Copyright © 2011-2022 走看看