Listview WinJS-对列表视图的持续更新

Listview WinJS-对列表视图的持续更新,listview,windows-8,winjs,Listview,Windows 8,Winjs,我不太清楚如何表达这个问题,所以我希望这是有意义的 我想创建一个listview,并且已经设置了所有的数据绑定和创建了一个模板等,因此它可以很好地显示数据,但是我显示的每个listview互动程序上的一个元素是一个实时时钟。问题是如何更新所有listview对象而不重新绘制整个listview 目前我唯一的工作方法是每秒更新绑定到它的数据,并按照我希望显示的时间进行更新,这是可行的,但它会重新绘制整个listview。这很昂贵,并且会触发动画(可以取消,但不能完全侦听动画开始事件) 谢谢 一种方

我不太清楚如何表达这个问题,所以我希望这是有意义的

我想创建一个listview,并且已经设置了所有的数据绑定和创建了一个模板等,因此它可以很好地显示数据,但是我显示的每个listview互动程序上的一个元素是一个实时时钟。问题是如何更新所有listview对象而不重新绘制整个listview

目前我唯一的工作方法是每秒更新绑定到它的数据,并按照我希望显示的时间进行更新,这是可行的,但它会重新绘制整个listview。这很昂贵,并且会触发动画(可以取消,但不能完全侦听动画开始事件)


谢谢

一种方法是为listview使用JavaScript模板。正常情况下,将数据绑定到列表视图,但向数据模型添加一个名为clock的属性。对于要渲染时钟的数据项,请将其值设置为true。在JavaScript模板中,您可以添加一些逻辑来确定磁贴是否应该是基于绑定属性的时钟,以及是否创建时钟模板,而不是在HTML中定义模板在JavaScript中定义模板(您可以在此处看到如何执行此操作):

function itemTemplateFunction(itemPromise) {

        return itemPromise.then(function (item) {

            if (item.data.clock == true) {
                //TODO: Append HTML and JS for your clock object
                //TODO: Perhaps set up a setInterval timer to tick your clock along.

            }
            else {
                //TODO Add the regular template Code, example below
                var div = document.createElement("div");

                var img = document.createElement("img");
                img.src = item.data.picture;
                img.alt = item.data.title;
                div.appendChild(img);

                var childDiv = document.createElement("div");

                var title = document.createElement("h4");
                title.innerText = item.data.title;
                childDiv.appendChild(title);

                var desc = document.createElement("h6");
                desc.innerText = item.data.text;
                childDiv.appendChild(desc);

                div.appendChild(childDiv);

                return div;

            }
        })
    };

给定对数据对象的访问权限(我假设您在希望执行此操作时仍然拥有该权限),模板如下:

<div data-win-control="WinJS.Binding.Template" id="yourTemplate">
    <div data-win-bind="textContent: timestamp"></div>
</div>
var item = getItemToUpdateFromSomewhere();
item.timestmap = "2 O'clock";