[地图SkyLine二次开发]框架(4)

继续上一节...

1.Extjs5.0版Menu.

-将Extjs包引入MenuPage.html页。

2.前段用Extjs的MVC框架

-在根目录下创建app文件夹,文件夹下分别创建controller,model,store,view文件夹

-根目录下创建app.js文件

-view文件夹下创建MainLayout.js文件

-controller文件夹下创建MainController.js文件

3.菜单页面布局

-MainLayout.js代码

Ext.define(‘ZZH.view.MainLayout‘, {
    extend: ‘Ext.panel.Panel‘,
    alias: ‘widget.mainLayout‘,
    layout: ‘border‘,
    initComponent: function () {

        // 底部
        var topPanel = Ext.create(‘Ext.panel.Panel‘, {
            region: ‘north‘,
            split: false,
            margins: ‘0 0 0 0‘
        });

        // 左边
        var leftPanel = Ext.create(‘Ext.tab.Panel‘, {
            layout: ‘fit‘,
            tabPosition: ‘left‘,
            region: ‘west‘,
            id: ‘tabbar‘,
            alias: ‘tabbar‘,
            width: 400,
            items: [
                { title: ‘菜单1‘ },
                { title: ‘菜单2‘ },
                { title: ‘菜单3‘ },
                { title: ‘菜单4‘ },
                { title: ‘菜单5‘ },
                { title: ‘菜单6‘ },
                { title: ‘菜单7‘ }
            ]
        });

        //中心
        var centerPanel = Ext.create(‘Ext.panel.Panel‘, {});

        // 右侧
        var resultPanel;

        this.items = [leftPanel, centerPanel, resultPanel];

        this.callParent(arguments);
    }

});

-MainController.js代码

Ext.define(‘ZZH.controller.MainController‘, {
    extend: ‘Ext.app.Controller‘,
    init: function (app) {
        this.control({
        });
    },
    views: [‘MainLayout‘]
});

4.将MainLayout渲染到MenuPage.html里,并且加载地图

-app.js代码

-把app.js引用到MenuPage.html里

Ext.application({

    name: ‘ZZH‘,

    appFolder: ‘../app‘,

    controllers: [
        ‘MainController‘
    ],
    launch: function () {
        Ext.create(‘Ext.container.Viewport‘, {
            layout: ‘fit‘,
            autoload: true,
            items: [
               {
                   xtype: ‘mainLayout‘
               }
            ],
            listeners: {
                afterrender: {
                    fn: function (vp, eOpts) {
                        setTimeout(‘CreateSGWord()‘, 1);
                    }
                }
            }
        });
    }
});

-这里要注意的是CreateSGWord()函数,之前我们是在SkyMap.js文件中写到取Object控件是

document.getElementById("TerraExplorerX").setAttribute("classid", "CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1");

但我们后来加了Iframe,结构变了,代码也需要稍微改一下

SkyMap.js代码

//页面初始化函数
function CreateSGWord() {
    window.parent.document.getElementById("TerraExplorerX").setAttribute("classid", "CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1");
    window.parent.document.getElementById("TerraExplorerX").style.display = "block";
    sgworld = document.createElement("object");
    sgworld.id = "sg";
    sgworld.classid = "CLSID:3a4f9197-65a8-11d5-85c1-0001023952c1";
    sgworld.Open("http://10.95.90.46/dlprj/大连九成3.FLY");
}

5.运行

6.这时我们注意到,当点击菜单页后,再点击地图时,地图还是会给菜单覆盖掉(真是令人头疼哈)

-没有关系,我们将MenuPage.html里的代码改成如下。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>

    <link href="../Scripts/ext-5.0.0/packages/ext-theme-crisp/build/resources/ext-theme-crisp-all.css" rel="stylesheet" />
    <script src="../Scripts/ext-5.0.0/ext-all.js"></script>
    <script src="../app.js"></script>
    <script src="../Scripts/SkyMap.js"></script>
    <script type="text/javascript">
        function Load() {
            document.getElementById(‘btnhidden‘).focus();    //加载时,设置焦点
        }
        function MyFocus() {
            if (document.all) {
                window.document.onclick = new Function("return onClick(event);"); //当点击MenuPage.html时,再次聚焦
            } else {
                window.document.body.setAttribute("onclick", "return onClick(event);");
            }
        }
        function onClick(ev) {
            ev = ev || window.event;
            var target = ev.target || ev.srcElement;
            if (target && target.id && target.id == "PanelBox") {
            }
            else {
                if (target.tagName == ‘INPUT‘) {
                    if (target.role == ‘checkbox‘) {
                        document.getElementById(‘btnhidden‘).focus();    //当点击checkbox的时候,再次聚焦
                    }
                }
                else { document.getElementById(‘btnhidden‘).focus(); }
            }
        }
    </script>
</head>
<body  onclick="MyFocus()">
    <input type="button"  style="width:40px;z-index:-2;position:absolute;top:0px;left:0px;filter:alpha(opacity=0);" id="btnhidden" />
</body>
</html>

7.再次运行,菜单就永远不会消失啦。。^^

8.结束语

让HTML控件在OBJECT控件之上,着实是让我头疼了一阵子,但还是解决了,相信有更好的办法,

有更好的办法,希望能告诉我,互相学习。。^^

[地图SkyLine二次开发]框架(4)

时间: 2024-10-07 06:22:20

[地图SkyLine二次开发]框架(4)的相关文章

[地图SkyLine二次开发]框架(2)

上节讲到,地图加载. 但我们可以发现,当没有页面布局的情况下,<OBJECT>控件,没有占满整个屏幕,这里我们就要用到Extjs的功能了. 这节要讲的是用Extjs为<OBJECT>控件布局,让它适应任何版本的IE浏览器(因为SkyLine目前只支持IE). 1.将Extjs包引进项目. -这里需要注意,网上下载的Extjs5.0包里,包含有很多例子之类的,为了保证项目尽可能的干净,我们只去一小部分. 2.在项目中应用 -我们在上一节,将OBJECT空间直接写在Index.csht

[地图SkyLine二次开发]框架(3)

上节将显示我们地图的OBJECT控件,布了一下局,但地图没有进行加载. 这是因为我们要在另一个页面,对OBJECT控件进行地图加载,并且得到该控件的sgworld,以便对其进行我们想要的开发. 这里,细心的人会说,为什么要在另一个页面加载呢?为什么不在OBJECT所在页面进行加载呢? 这也是一个比较关键性的问题,原因很简单, 因为Object控件上,放置任何DIV,SPAN,或者其他控件时,都会被Object控件覆盖在下面. 在网上找了很多办法,最有效的,而且项目中常用到的就是IFRAME方法.

[地图SkyLine二次开发]框架(5)完结篇

上节讲到,将菜单悬浮到地图上面,而且任何操作都不会让地图把菜单盖住. 这节带大家,具体开发一个简单的功能,来了进一步了解,这个框架. 1.想菜单中添加按钮 -上节定义的mainLayout.js文件里,定义按钮,并实例化它. -将按钮添加到,ZZH.view.MainLayout中. -运行看一下效果. 2.按钮加事件 -app/control文件夹里创建MainController.js里加上如下代码 -运行,并点击按钮测试,就是如下效果. 3.开发一个,画直线的功能. -在MainContr

[地图SkyLine二次开发]关于IE内存限制问题(1G)......(续)

二次开发Skyline时(B/S),经常会遇到,IE浏览器内存不够,导致崩溃的问题. 在上一个博文中写到,将IE-32bit浏览器内存限制扩展的解决办法. 上一个博文中做出来的iexplore.exe的基础上,将Skyline的安装包,以及适应浏览器版本的程序,打包成一个安装包. 在客户第一次登陆本系统时,让客户只需安装一次就OK. 一.准备工作: 1.下载.NetFrameWork4.5 2.将IE各个版本,按上一个博文中的方法,对应每一个版本,都做出来iexplore.exe 3.做适应IE

[地图SkyLine二次开发]关于IE内存限制问题(1G)

相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Skyline6.5只支持IE-32bit,据说6.6会支持Google,Fireforx,IE-64bit等浏览器,但目前解决不了问题,pass掉 b).360.捷豹等国内开发且使用IE-32bit内核的,据说对内存问题有所改善,测试了一下,结果还算令人满意,但项目要求支持IE浏览器,So Pass掉

【0002(基础)】Skyline二次开发入门经典系列教程&mdash;&mdash;目录

这段时间由于个人事务太多,以至于没有按照时间更新系列教程,本人将尽快补上所欠章节,在此说声抱歉!   这一章在我心目中占有很重要的地位,因为我想通过这一章的内容来确定整个系列的大致走向.然而在整理的过程中,发现现实远比想象要复杂得多:首先想尽可能介绍较多的知识点,其次又要考虑学习的简易程度,再次又要确定顺当的知识体系流程-- 由于暂时的考虑无论如何也是不可能完备的,因此为了不影响后面教程的编写,暂定把这一章作为一个[流动性质]的可变章节,在编写每一章时,动态根据实际情况修改(添加.移动.修改)系

【0001(基础)】Skyline二次开发入门经典系列教程总览

本人是从2012年开始接触Skyline二次开发的,经历过 v6.0~v6.5(最新的6.6版本还未使用)的所有版本.作为一名非GIS专业毕业的大学本科生,鬼使神差般地进入了这个瑰丽的GIS领域.因此,在从事了4年多的Skyline二次开发工作后,我不能说我是"授业有专攻",更不能说我是"闻道有先后".在这个领域内,大牛之人比比皆是,正是因为他们的存在与指引,才使得我现在有点东西可以写出来供大家交流沟通.   整理这个系列教程的原因主要出于如下几点的考虑: 1.Sk

百度地图API二次开发小经验分享

最近在做一个物流后台系统,需要用地图来把订单地址展示出来,需要在地图上批量框选坐标进行排单,需要看到配送员的实时位置等等功能. 在高德地图.腾讯地图.百度地图三者间,我选了百度地图,没有原因,个人偏好,因此我也不知道高德地图和腾讯地图好不好用.反正到目前为止,我所想到的功能,百度都有对应的接口提供,点个赞. 一.关于百度地图的JavaScript API 在网站上通过js直接来调用百度的api,使用方法很简单,可以参考官网:http://developer.baidu.com/map/index

Skyline(6.x)-二次开发手册使用技巧

毕业设计选择Skyline的Web端二次开发,由于以前没有接触过ActiveX控件的使用,二次开发手册是英文的读起来有点吃力,并且IE直接控制台输出ActiveX控件创建的对象看不到内部的属性和方法,使得整个毕设快做完了才感觉弄明了Skyline二次开发的套路. 手册存放位置 默认安装是:C:\Program Files (x86)\Skyline\TerraExplorer Pro\Help\ProgrammersGuide.chm 查看ActiveX控件创建的对象看的属性和方法 使用Obje