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