我正在使用Javascript和winJS框架构建类似于Windows 8的网格应用程序模板的应用程序。对于我的一个页面,我的许多项目具有相同的值,并且使用.createFiltered为每个不同的值返回了1个项目。这非常适合添加新项目,因为.createFiltered方法会更新并检查我的新项目是否具有新值。
我遇到的问题是删除项目。当我拼接WinJS列表时,有可能删除了.createFiltered方法为重复值返回的项目,但是还有其他项目与该值有关。所以我需要再次运行.createFiltered,然后选择一个不同的项目。
我会举个例子。
我有5个项目,其中有两种类型的“Apple”和“banana”。
在我的主页上,我将物品分类为水果/蔬菜/糖果。这五个项目都在水果之下,但不是给出不同的品牌,我只想让它说“Apple”和“Banana”所以我有一个函数,它将为每种类型获得一个项目并将其绑定到WinJS.Binding.Template然后使用“textContent:Type”显示Apple / Banana。
假设我有2个苹果“Gala”和“Granny Smith”,我已将“Gala”的数据绑定到主页,然后我用完了“Gala”苹果(删除它)。我仍然有苹果库存(格兰尼史密斯)所以我需要.createFiltered函数再次运行,因为主页不再在Fruit下显示“苹果”。
谢谢
答案 0 :(得分:0)
自写这篇文章以来,我设法找到一种方法让它发挥作用。我所做的是找到我正在删除的项目的值,然后通过数组查看是否可以找到具有该值的其他项目。然后我从列表中删除了它,然后重新添加它,导致.createFiltered处理该项目。
确切代码:
function dashRefresh(toDelete) {
//Project Key of Deleted Item
var deletedProjectKey = toDelete.data.project.key;
//Use new item to bind project data
var newProjectBinder = 0;
var newProjectBinderIndex;
for (var i = 0; i < list.length; i++) {
var listItem = list.getAt(i);
if (listItem.project.key == deletedProjectKey) {
newProjectBinder = listItem;
newProjectBinderIndex = i;
i = list.length;
}
}
if (newProjectBinder != 0) {
list.splice(newProjectBinderIndex, 1);
list.push(newProjectBinder);
}
}