博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows 8.1 应用再出发 (WinJS) - 几种新增控件(2)
阅读量:7172 次
发布时间:2019-06-29

本文共 5308 字,大约阅读时间需要 17 分钟。

上篇我们介绍了Windows 8.1 和 WinJS 中新增控件中的 AppBarCommand、BackButton、Hub、ItemContainer,本篇我们接着来介绍 NavBar、Repeater 和 WebView。

 

1. NavBar

NavBar 是专门用于导航命令的应用栏控件,它是AppBar 的子类。可以完成简单的链接,也可以完成多层链接。

类似XAML 中的 TopAppBar,NavBar 会在用户通过边缘滑动或按下 Win + Z 或鼠标右键点击的时候,出现在页面顶部。

NavBar 包括三个组件:

1) NavBar

2) NavBarContainer, 它包含了导航项,支持分页和滚动等。在一个NavBar 中可以包含多个NavBarContainer 对象。

3) NavBarCommand, 就是我们刚才说的导航项,用户单击它可以导航到目标。

想要实现导航,可以设置NavBarCommand 的 location 属性,用户单击时,可以导航到指定的位置。

另外可以定义NavBar 的 oninvoked 事件,并编写事件处理程序来执行导航操作。下面看看代码实现:

我们定义了NavBar,添加了两个command:Home 和 Your apps。通过location属性来定义导航目标,来看看效果图:

下面来看看自定义oninvoked 事件的部分代码:

(function () {    "use strict";    var navcontainer;    var page = WinJS.UI.Pages.define("/html/main.html", {        ready: function (element, options) {            document.body.querySelector('#useSplit').addEventListener('invoked', this.navbarInvoked.bind(this));            document.body.querySelector('#contactNavBarContainer').addEventListener('invoked', this.navbarInvoked.bind(this));            var navBarContainerEl = document.body.querySelector('#useSplit .globalNav');            if (navBarContainerEl) {                this.setupNavBarContainer();            } else {                var navBarEl = document.getElementById('useSplit');                navBarEl.addEventListener('childrenprocessed', this.setupNavBarContainer.bind(this));            }        },        navbarInvoked: function (ev) {            var navbarCommand = ev.detail.navbarCommand;            WinJS.log && WinJS.log(navbarCommand.label + " NavBarCommand invoked", "sample", "status");            document.querySelector('select').focus();        },        setupNavBarContainer: function () {            var navBarContainerEl = document.body.querySelector('#useSplit .globalNav');            navBarContainerEl.addEventListener("splittoggle", function (e) {                var flyout = document.getElementById("contactFlyout").winControl;                var navbarCommand = e.detail.navbarCommand;                if (e.detail.opened) {                    flyout.show(navbarCommand.element);                    var subNavBarContainer = flyout.element.querySelector('.win-navbarcontainer');                    if (subNavBarContainer) {                        subNavBarContainer.winControl.forceLayout();                        subNavBarContainer.currentIndex = 0;                    }                    flyout.addEventListener('beforehide', go);                } else {                    flyout.removeEventListener('beforehide', go);                    flyout.hide();                }                function go() {                    flyout.removeEventListener('beforehide', go);                    navbarCommand.splitOpened = false;                }            });        }    });})();

我们为NavBar 定义了三个command, Home、Favorites 和 Your account。其中Favorites 命令点击时,弹出contactFlyout,点击flyout 中的命令时,完成导航。

 

2. Repeater

Repeater 可以使用模板从一组数据中生成HTML标记,使用它可以生成自定义列表和表格。Repeater 可以从List 中生成数据,来看看代码示例:

This is an example AppBarCommand of type 'flyout'.
  • var basicList2 = new WinJS.Binding.List(       [           { title: "Item 1" },           { title: "Item 2" },           { title: "Item 3" },           { title: "Item 4" }       ]);    WinJS.Namespace.define("RepeaterExample",        {            basicList: basicList2        });

    我们在html 代码中定义了Repeater 和它对应的模板,并在js中定义了数据。来看看效果图:

     

    3. WebView

    WebView 是用于显示Web内容的控件。在WebView 出现之前,想要显示网页内容,需要使用iframe 元素。WebView 有这么几方面的优势:

    • 支持 HTML5  ,WebView 中的页面可访问大部分HTML5 功能
    • 改进的导航支持,WebView有单独的历史记录堆栈,提供了包括前后导航以及重新加载当前页等方法
    • 支持在iframe 中无法使用的站点

    WebView 支持使用 src 属性,navigate 方法 或 navigateToString 方法导航到指定URI,我们分别来看看代码实现:

    1)通过src 属性导航

    我们看,WebView 对应 x-ms-webview 元素。来看看效果图:

    2)使用 navigate 方法 来加载存储在应用的状态文件夹中的Html 内容,这需要ms-appdata:// 协议的配合

    Windows.Storage.ApplicationData.current.localFolder.createFolderAsync("NavigateToState", Windows.Storage.CreationCollisionOption.openIfExists).then(function (stateFolder) {        Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("webViewContent.html").then(function (htmlFile) {            return htmlFile.copyAsync(stateFolder, "webViewContent.html", Windows.Storage.CreationCollisionOption.failIfExists);        });    }).done(function () {        document.getElementById("webview").navigate("ms-appdata:///local/NavigateToState/webViewContent.html");    }, function (error) {        WinJS.log && WinJS.log("Couldn't create HTML file in local app state folder", "sample", "error");    });

    3)使用 navigateToString 方法来加载Html 字符串

    var htmlString = "" +            "" +            "HTML page" +            "" +                "

    Hi!

    " + "

    使用navigateToString 加载的网页

    " + "" + ""; document.getElementById("webview").navigateToString(htmlString);

    另外WebView 还支持通过 navigateWithHttpRequestMessage 方法向指定 URI 方法POST请求和HTTP标头的方式来显示网页,这里我们不做显示。

     

    好了,到这里,我们就把Windows 8.1 和 WinJS 新增的控件介绍完了,希望对大家有所帮助,谢谢。

     

    转载地址:http://jrfzm.baihongyu.com/

    你可能感兴趣的文章
    一次arp proxy的欺骗行为
    查看>>
    ConerStone Description : Can&39;t move XX to XX Permission denied Status : 13
    查看>>
    常见性能优化策略
    查看>>
    我的友情链接
    查看>>
    MySQL大字段实验
    查看>>
    jsp基础语法【02】_注释的使用
    查看>>
    Oracle 之数据字典
    查看>>
    CSS之居中
    查看>>
    cisco ipsec ***的配置
    查看>>
    跟小博老师一起学习MyBatis ——MyBatis简介
    查看>>
    从apache mod_php到php-fpm
    查看>>
    执行环境
    查看>>
    Linux crontab定时执行任务 命令格式与详细例子
    查看>>
    zabbix数据库迁移事项
    查看>>
    linux 多硬盘 分区格式化自动挂载知识点
    查看>>
    phpMyAdmin中sql-parser组件的使用
    查看>>
    .NET文档处理套包GroupDocs.Total for .NET新版发布 | 附下载
    查看>>
    Excel 控件Spire.XLS 7.12.130发布 | 附下载
    查看>>
    shell - sed中如何替换出新行来
    查看>>
    Crontab
    查看>>