【问题标题】:Listening to click event on ListView监听 ListView 上的点击事件
【发布时间】:2012-09-19 17:34:47
【问题描述】:

感觉我在这里遗漏了一些愚蠢的东西,但是在列表视图上收听点击事件的推荐方法是什么?

目前我有:

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

我的列表视图模板使用“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>

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

编辑:

如果我说想使用 WinJS.Navigator 类来移动应用?我猜我需要将eventInfo 的一部分转换为合适的对象并检索信息,是哪一部分?

【问题讨论】:

    标签: microsoft-metro winjs windows-store


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      假设您要“传递”的数据是绑定到被调用项的数据,您可以在传递给 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”作为事件参数。在函数中,我访问 e.detail.itemPromise 并挂起一个 .then 。然后我使用 item.data 访问 .then 中的实际数据。 希望这就是你的意思。顺便说一句,格式功能是我的功能之一,以防您想知道为什么它不适合您。

      【讨论】:

      • 啊,太棒了,这是我缺少的东西的 detail.itemPromise 方面,以前只是使用超链接中的 href 属性,所以不知道如何获取数据。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2012-11-27
      相关资源
      最近更新 更多