javascript - 在 ListVIew 中动态绑定(bind)项目

标签 javascript listview windows-8 windows-store-apps winjs

在我的 Windows 8 JavaScript 应用程序中,我有一个 ListView。我需要根据当前用户的状态添加消息或链接到行。所以我基本上需要根据某些标志来显示或隐藏项目。如何使用 ListView 的 JavaScript API 在项目级别解析项目?根据 MSDN,ListView 控件上没有项目集合,我需要在行级别访问数据和项目。

我确信我不知何故错过了它,只是进入这个......

最佳答案

我不太清楚你想做什么,但我会尝试一下。 如果您需要有条件地显示或隐藏项目(或项目的某些部分),您可以采用几种方法。

首先是创建一个命令式模板渲染函数。首先,告诉您 ListView 它的项目模板是一个类似 myListView.itemTemplate = myCustomFunction 的函数。然后编写一个函数,例如:

function myCustomFunction(itemPromise) {
    //you have to return a promise
    return itemPromise.then(function (item) {
        //get the right item template (declared in your HTML),
        //render the item data into it, and return the result
        var itemTemplate;
        if (item.data.key === "foo")
            itemTemplate = q("#fooItemTemplate", element); //return foo template
        else if (item.data.key === "bar")
            itemTemplate = q("#barItemTemplate", element);
        return itemTemplate.winControl.render(item.data);
    });
}

如果其中一个项目模板具有显式样式代码来显示或隐藏部分,而另一个则没有,那么您将获得所需的结果。

另一种方法是等待ListView加载完成,然后根据你的条件遍历和操作DOM。

要捕获 ListView 完成加载的那一刻,请执行以下操作:

myListViewControl.onloadingstatechanged = function (e) {
    if (myListViewControl.loadingState == "complete") {
        ...
    }
}

ListView 在加载时会经历几个加载状态,最后一个是“完成”。完成后,您可以使用 CSS 选择器的强大功能以及 ECMAScript 5 提供的新 querySelector/querySelectorAll 方法来查找所有 ListView 项目,如下所示:

myListView.querySelectorAll(".win-item")

这将返回所有 ListView 项的 NodeList,您可以使用 DOM 操作方面的忍者技能来处理它们。

希望有帮助!!

附注查看 codeSHOW 以了解 Windows 8 中的更多 HTML/JS 开发 ( aka.ms/codeshowapp | codeshow.codeplex.com )

关于javascript - 在 ListVIew 中动态绑定(bind)项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421051/

相关文章:

javascript - 电子表格中的 Google Geochart 动态值

android - 从 ListArray 填充自定义 ListView

c# - Windows 8 将属性属性名称绑定(bind)到 UI

visual-studio - 如何将新版本的 SQLite 与 Visual Studio 同步?

java - ListView 不会填充(从文件)

java - Windows 8 UAC 禁用 + neo4j + tomcat 7 - 没有写入磁盘的权限?

javascript - 是否可以在 JavaScript 中覆盖 XMLHttpRequest.send() 然后检测并撤销覆盖?

javascript - 如何让 Mocha 考试不及格

javascript - 如何创建html5自定义验证?

asp.net ListView 使用 DataBind 排序