如何通过 Javascript 创建 WinJS Flyout

How to create a WinJS Flyout via Javascript

目前我有一个带有一些按钮的工具栏,这是我创建它的方法:

HTML

  <div id="toolbarContainer1" style="direction: rtl"></div>

Javascript

var dataArray= [
                        new WinJS.UI.Command(null, { id: 'cmdView3', label: 'View3', section: 'primary', type: 'button', icon: 'stop', tooltip: 'View 3', onclick: function () { changeView('view3') } }),
                        new WinJS.UI.Command(null, { id: 'cmdView2', label: 'View2', section: 'primary', type: 'button', icon: 'stop', tooltip: 'View 2', onclick: function () { changeView('view2') } }),
                         new WinJS.UI.Command(null, { id: 'cmdView1', label: 'View1', section: 'primary', type: 'button', icon: 'stop', tooltip: 'View 1', onclick: function () { changeView('view1') } })
        ];

 window.createImperativeToolBar = function () {

            var tb = new WinJS.UI.ToolBar(document.querySelector("#toolbarContainer1"), {
                data: new WinJS.Binding.List(dataArray)
            });

            var thisToolbar = document.querySelector('#toolbarContainer1');
            thisToolbar.winControl.closedDisplayMode = 'full';
        }

我试过像这样添加它:

new WinJS.UI.Flyout(null, { id: 'formatTextFlyout', section: 'primary' })

它被附加到 DOM,但看起来这些选项不起作用。 dom 中的 div(弹出窗口)没有我在上面设置的 ID。

我想在单击按钮时显示弹出窗口:

function showFlyout() {
            console.log('flyout');
            var formatTextButton = document.getElementById("formatTextButton");
            document.getElementById("formatTextFlyout").winControl.show(formatTextButton);
        }

但很明显,因为没有设置 ID,所以记录了一个错误。有什么想法吗?

这是我尝试过的fiddle:https://jsfiddle.net/reko91/yg0rs4xc/1/

当你像这样创建一个 win-control 时:

new WinJS.UI.Flyout(null, { id: 'formatTextFlyout', section: 'primary' })

id "formatTextFlyout" 只是这个弹出控件的 id。

但是你用document.getElementById("formatTextFlyout")方法找到这个控件,问题就在这里,这个方法只能找到Id为"formatTextFlyout"的html元素对象,并没有一。可以参考getElementById method.

这里的一个解决方案是创建一个 Flyout,如下所示: HTML:

<div id="flyoutContainer"></div>

Javascript:

var flyout = new WinJS.UI.Flyout(document.querySelector("#flyoutContainer"), { id: 'formatTextFlyout', section: 'primary' });

function showFlyout() {
            console.log('flyout');
            var formatTextButton = document.getElementById("formatTextButton");
            document.getElementById("flyoutContainer").winControl.show(formatTextButton);
        }

var flyout = new WinJS.UI.Flyout(document.querySelector("#flyoutContainer"), { id: 'formatTextFlyout', section: 'primary' });

function showFlyout() {
            console.log('flyout');
            var formatTextButton = document.getElementById("formatTextButton");
            flyout.show(selectedButton);
        }

如果你在那里阅读 WinJS.UI.Flyout object 的样本,你会在 html 文件中找到,它创建了一个 Flyout 像这样:

<div id="formatTextFlyout" data-win-control="WinJS.UI.Flyout" 
             aria-label="{Format text flyout}">

html 元素是 div 并且有一个 id "formatTextFlyout"。

补充:在网站Try WinJS中,有很多用html+javascript+css写的win-control示例。