2

My HTML:

<div id="listViewBoxOffice" 
     data-win-control="WinJS.UI.ListView"  
     data-win-options="{ itemTemplate: select('#movieThumbnailTpl'), selectionMode: 'single' }">
</div>

My 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');
    }
});

My problem:

The event selectionchanged is never fired. The event selectionchanging is fired but with bad value in newSelection.

4

3 回答 3

3

要检查 selectionchanged 事件是否正常工作 右键单击​​ listview 项目。我认为当我们只单击 listview 项目时,它需要 iteminvoke 事件,而选择我们需要右键单击该项目。以下是触发 selectionchanged 事件的代码片段

 <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"

于 2013-09-10T09:44:19.807 回答
3

虽然文档并不像我认为的那样清楚,但您需要将tapBehavior属性设置为"toggleSelect"以便完全选择项目。默认情况下,行为是invokeOnly并且它不会完全选择项目。它单击,但未被选中。

MSDN文档中有一个不错的示例。

如果您存储listViewBoxOffice实例的副本,那么从事件中,您可以通过 Promise 获取当前列表:

listViewBoxOffice.selection.getItems().done(function(items) {
    // do something with the items...
});
于 2013-09-10T01:07:48.113 回答
0

请尝试使用调用的项目。这是 调用 Winjs Listview 的 Msdn 链接项目

并尝试相应地更改选择。此外,如果这不起作用或您只想更改选择,请在您设计的模板中发布。将需要遍历整个代码:)

于 2013-09-10T06:27:53.853 回答