あなたが何をしようとしているのか完全にはわかりませんが、試してみます。アイテム (またはアイテムの特定の部分) を条件付きで表示または非表示にする必要がある場合は、いくつかの方法があります。
1 つ目は、命令型のテンプレート レンダリング関数を作成することです。まず、アイテム テンプレートが のような関数であることを 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);
});
}
アイテム テンプレートの 1 つにパーツを表示または非表示にするための明示的なスタイル コードが含まれていて、もう 1 つには含まれていない場合、探している結果が得られます。
もう 1 つの方法は、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 操作を行うことができます。
それが役立つことを願っています!!
PS Windows 8 での HTML/JS 開発の詳細については、codeSHOW をご覧ください ( aka.ms/codeshowapp | codeshow.codeplex.com ) 。