我的HTML:
<div id="listViewBoxOffice"
data-win-control="WinJS.UI.ListView"
data-win-options="{ itemTemplate: select('#movieThumbnailTpl'), selectionMode: 'single' }">
</div>
我的javascript:
WinJS.UI.Pages.define("/pages/home/home.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
ready: function (element, options) {
api.getBoxOffice().done(this.boxOffice, this.errBoxOffice);
listViewBoxOffice.winControl.addEventListener('selectionchanging', this.selectionchanging);
listViewBoxOffice.winControl.addEventListener('selectionchanged', this.selectionchanged);
},
boxOffice: function (movies) {
var list = new WinJS.Binding.List(movies);
listViewBoxOffice.winControl.itemDataSource = list.dataSource;
},
errBoxOffice: function (err) {
debugger;
},
selectionchanged: function (evt) {
console.log('changed');
},
selectionchanging: function (evt) {
console.log('changing');
}
});
我的问题:
事件selectionchanged永远不会被触发。事件选择更改被触发但在newSelection
中值不正确答案 0 :(得分:3)
虽然文档并未像我认为的那样明确,但您需要将tapBehavior
属性设置为"toggleSelect"
,以便完全选中项目。默认情况下,行为为invokeOnly
,并且不会完全选择该项。它点击了,但没有被选中。
MSDN documentation中有一个不错的例子。
如果您存储了listViewBoxOffice
实例的副本,那么从事件中,您可以通过承诺获取当前列表:
listViewBoxOffice.selection.getItems().done(function(items) {
// do something with the items...
});
答案 1 :(得分:3)
检查selectionchanged事件是否正常工作右键单击listview项目。我认为当我们只需单击listview项目时,它需要iteminvoke事件,我们需要右键单击该项目。 以下是触发selectionchanged事件的代码snipet
<div id="UserListView" data-win-control="WinJS.UI.ListView" style="border-top: 5px solid #000; min-width:500px;"
data-win-options="{
selectionMode:'multi',
itemTemplate:select('#itemsList'),
layout:{
type:WinJS.UI.GridLayout}}"
>
</div>
和js
UserListView.addEventListener("selectionchanged", selection);
function selection(evt) {
var test = "testing";
}
设置断点,你可以在evt中检查type =“selectionchanged”
答案 2 :(得分:0)
请尝试使用调用的项目。这是Msdn链接 Item invoked Winjs Listview
并尝试相应地更改选择。 此外,如果这不起作用或您只想更改选择,请在您设计的模板中发布。将需要完成整个代码:)