在ListView上收听click事件

时间:2012-09-27 20:45:06

标签: microsoft-metro winjs windows-store

感觉我在这里错过了一些愚蠢的东西,但是在listview上听点击事件的推荐方法是什么?

目前我已经:

WinJS.Utilities.query(".menuHolder").listen("click", linkClickHandler, false);

我的listview模板使用类'menuHolder'作为它的项目:

            <div id="menuTemplate"
            data-win-control="WinJS.Binding.Template">
            <div class="menuHolder">
                <!-- menu img -->
                <img src="#" data-win-bind="src : pic; alt : title" />

                <div class="menuText">
                    <!-- menu text -->
                    <h1 data-win-bind="innerText : title"></h1>
                    <!-- menu desc -->
                    <h4 data-win-bind="innerText : description"></h4>
                </div>
            </div>
        </div>

我似乎没有点击我的断点,在我的链接处理程序中,或者调用它的函数。有什么想法吗?

修改

作为后续问题(记住项目调用事件)是任何人都知道推荐的方法在listview和iteminvoked事件之间传递数据,如果我说想要使用WinJS.Navigator类来移动应用?我猜我需要将eventInfo的某些部分投射到合适的对象中并检索信息,这是什么部分?

2 个答案:

答案 0 :(得分:6)

假设您要“传递”的数据是绑定到被调用项的数据,您可以在传递给iteminvoked事件的事件参数中执行此操作。我的一个看起来像这样......

demosLV.oniteminvoked = function(e) {
    e.detail.itemPromise.then(function(item) {
        var location = format("/pages/{0}/{0}.html", item.data.key);
        WinJS.Navigation.navigate(location, item.data);
    });
};

所以demosLV是ListView。我正在将oniteminvoked设置为一个函数。该函数接收“e”作为事件args。在函数中,我访问e.detail.itemPromise并挂起它。然后关闭它。然后我使用item.data访问.then中的实际数据。 希望这就是你的意思。顺便说一句,格式函数是我的一个,以防你想知道它为什么不适合你。

答案 1 :(得分:4)

似乎我是一个香肠,我需要在父列表视图ID引用上监听'iteminvoked'事件,而不是子级别。

WinJS.Utilities.query("#menu").listen("iteminvoked", linkClickHandler, false);