- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WinJS ListView,它的项目是使用模板函数创建的(itemTemplate
选项指向一个函数)。返回的项目内部有一个 div,该 div 具有 win-interactive
类,以便它可以接受输入。具体来说,该 div 需要能够滚动以显示更多适合 ListView 项目的内容。
滚动与应用于 div 的 win-interactive
类完美配合。我试图解决的问题是允许正常单击(鼠标向下、鼠标向上)仍然触发 ListView 上的 oniteminvoked 事件,同时仍然允许滚动 ListView 项内的 div。
我认为这很简单:我可以使用 win-interactive
类将单击事件监听器绑定(bind)到 div,然后简单地将单击事件传递到 ListView 项上的另一个元素,确保最终触发 oniteminvoked
事件。
我已将点击监听器绑定(bind)到 win-interactive
div,并且它按预期触发。但是,我无法弄清楚如何在 ListView 项目的另一部分上触发单击/项目调用。我尝试使用事件 (currentTarget) 的属性来获取父元素或同级元素并在它们上触发事件,但我根本不知道如何在像 event.currentTarget
这样的元素上触发事件>.
tl;博士:如何允许在 ListView 项目内滚动,同时仍允许正常单击触发项目调用?
最佳答案
总的来说,ListView 只是通过将点击传递给您为控件注册的任何 itemInvoked 处理程序来处理点击。这意味着您应该能够绕过整个链并使用适当的项目索引直接调用处理程序,这很容易获得。
在项目的点击处理程序中,如果您手边有 ListView 对象,则 list.currentItem 将是具有焦点的项目(显然是单击的项目),其索引属性将是通常传递给 itemInvoked 的内容。这样,您就可以直接调用 itemInvoked 处理程序,构建适当的事件对象,或者您可以将处理程序的代码分离到另一个方法中并调用该方法。
作为一个基本示例,从网格应用程序模板项目开始,我将 win-interactive 添加到 pages/groupedItems/groupedItems.html 中的 item-title 元素(可以是任何其他类似滚动区域的元素):
<h4 class="item-title win-interactive" data-win-bind="textContent: title"></h4>
在pages/groupedItems/groupedItems.js的ready方法中,我将ListView的对象附加到页面控件以供以后使用:
var listElement = element.querySelector(".groupeditemslist");
var list = listElement.winControl;
this._list = list;
然后将点击监听器连接到 item-title 元素,如下所示。我这样做是因为项目是通过模板创建的;如果您有项目渲染功能,那么您可以直接在该代码段中添加监听器。
var that = this;
list.addEventListener("loadingstatechanged", function () {
if (list.loadingState == "complete") {
var interactives = element.getElementsByClassName("item-title");
for (var i = 0; i < interactives.length; i++) {
interactives[i].addEventListener("click", that._itemClick.bind(that));
}
}
});
我的页面控件中 _itemClick 的实现如下所示:
_itemClick: function (e) {
var item = this._list.currentItem;
//Can also get the index this way
var index = this._list.indexOfElement(e.currentTarget);
this._itemInvoked({"detail" : { itemIndex : item.index} })
},
其中 this._itemInvoked 与模板附带的处理程序相同。
请注意,使用 win-interactive,对于执行小型向下/向上动画的项目,您不会获得通常的 pointerDown/pointerUp 行为,因此如果您认为重要的话,您可能也希望包含这些行为(使用 WinJS.UI .Animation.pointerDown/pointerUp 方法来实现效果)。
最后,可能可以从 _itemClick 内的 e.currentTarget 元素沿着链向上,并在相应的父元素上模拟单击事件,但我认为这比在这里跟踪执行所有操作的 WinJS 代码更麻烦。那。更直接地调用您自己的 itemInvoked。
关于javascript - 如何在 WinJS ListView 中手动触发 oniteminvoked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273155/
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我正在实现一个 DataAdapter 以绑定(bind)到 WinJS ListView 控件。该接口(interface)需要一个返回 Promise 的 getCount 方法。如果我直接返回一
我正在尝试包装 WinJS rating control在 Angular2 组件中。当我调试时,我可以看到正在调用和执行 WinJS.UI.processAll();。但是我没有看到评分控件。 我怎
我想知道是否有人可以阐明为什么这不起作用。 如果我在我的 html View 中定义模板(第一个场景),我可以成功地动态模板化每个 WinJS.UI.ListView 项目。但是,如果我使用 $.ge
The MSDN documentation显示了为 Win8 WinJS 应用程序设置 onactivated 事件的两个选项: WinJS.Application.addEventListener
我在 HTML5/JAVASCRIPT 平台上开发 windows store app 并安装了 SPLIT APP 模板。 我想显示一个 HTML 页面。如果我使用 HTML Hyperlink 属
这可能是一个愚蠢的问题,但我一直无法找到答案。我想从我的 Windows 8 javascript 应用程序中使用 IE10 启动一个特定的 URL,即我的应用程序将被暂停,而 IE10 将启动。我如
在 WinJS 中,我这样声明类: WinJS.Namespace.define('MyNamespace', { MyClass: WinJS.Class.define(function c
我有一个在我的网站中使用过的 js 代码。我使用 eval() 来保密代码。但现在我需要在我的 winJS 应用程序中使用相同的代码。但我发现由于 WinJS.strictProcessing() ,
我已尝试使用以下代码来获取切换开关按钮的检查值。但我无法在JavaScript方法中找到切换开关的checked属性。 .js: var yammerpt = document.getElementB
我正在尝试在 WinJS (Windows Phone 8.1 UWP) 中的 ListView 上添加上下文菜单。首先,我想通过选择元素并添加事件监听器来添加它。这是我的 HTML 代码:
我在我的 UWP javascript 应用程序中使用 Parse javascript SDK。正如快速入门中提到的,我使用以下行初始化 Parse, Parse.initialize("App_I
我有一个为我的业务创建的 Windows 应用商店应用。我的企业已经成功使用它几个月了,但我们在读取保存的数据时偶尔会遇到错误;找到一种方法来最小化这些数据保存和读取错误是非常非常重要的。 具体来说:
例如,它需要调用使用 SSL 托管的 Web 服务。 如果可以的话,那么客户端证书如何通过呢? 非常感谢!! WinJS.xhr({ type: "
我尝试了以下代码来获取切换开关按钮的检查值。但是我无法在 JavaScript 方法中找到切换开关的 checked 属性。 .js: var yammerpt = document.getEleme
谁能告诉我如何处理 WinJS 代码中未处理的异常。有没有更好的方法来处理它们而不是使用 try/catch block 。我已经在我的代码的某些部分使用了 try/catch block 。 最佳答
我正在开发 Windows 8 应用商店应用程序(使用 WinJS - html5、js、jquery),我正在尝试使用它; WinJS.Navigation.back(); 此后退功能有效并返回一页
我正在使用 HTML/CSS/JS 和 WinJS 框架开发适用于 Windows 应用商店的应用程序。 我的应用程序需要在启动时加载配置数据,如果在线则通过网络加载,如果不在线则通过本地加载。 我的
我正在寻找一种方法来显示存储在字节数组中的 JPEG 图像。这是一个用 Javascript 构建的 Windows 8 商店应用程序。字节数组从 C# WinRT 组件返回。它在 C# 中的类型是
有没有办法直接在我的 WinJS 控件选项定义中使用 WinJS 评估全局资源,而不是使用 data-win-res 属性,因为特定选项是一个复杂的对象? 这是我所拥有的: 以下尝试评估资源会崩溃
我是一名优秀的程序员,十分优秀!