• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
求真 务实
代码简单,高效,易懂才是好代码.
博客园    首页    新随笔    联系   管理    订阅  订阅

Metro javascript How to: 如何获取嵌入每个Item的控件的事件

如图

listview 中每一个选项都有一个button控件。

我们要点击这个button控件并通过这个控件获取这个item的相关信息,在listview中应该如何实现?

方法:

动态加载template,这样我们就可以在动态添加button控件时加入button click事件了,然后在此时可以获取到所有动态创建的其他控件的信息。

代码如下:

首先在HTML页面中 我们申明一个动态创建的itemTemplate:MyJSItemTemplate   

<div data-win-control="SdkSample.ScenarioOutput">
        <div id="listView" 
            data-win-control="WinJS.UI.ListView" 
            data-win-options="{ 
                itemDataSource: myData.dataSource, 
                itemTemplate: MyJSItemTemplate, 
                selectionMode: 'none', 
                tapBehavior: 'none', 
                swipeBehavior: 'none', 
                
            }"
        ></div>
    </div>

 

 然后是后台代码中,我们需要声明这样一个方法,返回其所需的类型:

function MyJSItemTemplate(itemPromise) {
    return itemPromise.then(function (currentItem) {

        // Build ListView Item Container div
        var result = document.createElement("div");
        result.className = "regularListIconTextItem";
        result.style.overflow = "hidden";

        // Build icon div and insert into ListView Item
        var image = document.createElement("img");
        image.className = "regularListIconTextItem-Image";
        image.src = currentItem.data.picture;
        result.appendChild(image);

        // Build content body
        var body = document.createElement("div");
        body.className = "regularListIconTextItem-Detail";
        //body.style.overflow = "hidden";

        // Display title
        var title = document.createElement("h4");
        title.innerText = currentItem.data.title;
        body.appendChild(title);

        // Display text
        var fulltext = document.createElement("h6");
        fulltext.innerText = currentItem.data.text;
        body.appendChild(fulltext);

        //Display button1
        var Button = document.createElement("button");
        Button.innerText = "button";
        //WinJS.Utilities.addClass(Button, "win-interactive");
        Button.addEventListener("click", function (eventObject) {

            var content1 = document.getElementById("content1");
            content1.innerHTML = "title=" + title.innerText + "fulltext" + fulltext.innerText;
        });


        body.appendChild(Button);
        result.appendChild(body);
     
        return result;
    });
}

 

 这样就可以直接获取到它的click事件了。

但是 如果所添加的控件是可滑动的那种,例如一个滑动条控件,我们就需要给他添加一个class="win-interactive" 属性了,

因为你用手滑动的时候,系统会以为是滑动整个listview 而不是里面的控件,这是加上这个class就可以防止listview滑动了。

 

 

posted @ 2012-08-01 19:00  Dino H.Y  阅读(473)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3