2

私の Windows 8 JavaScript アプリケーションには、ListView があります。現在のユーザーのステータスに応じて、メッセージまたはリンクを行に追加する必要があります。したがって、基本的に、フラグに応じてアイテムを表示または非表示にする必要があります。ListView の JavaScript API を使用して、アイテム レベルでアイテムを解析するにはどうすればよいですか? MSDN によると、ListView コントロールには項目のコレクションがなく、行レベルでデータと項目にアクセスする必要があります。

私はこれに入るだけで、どういうわけかそれを見逃していると確信しています....

4

1 に答える 1

2

あなたが何をしようとしているのか完全にはわかりませんが、試してみます。アイテム (またはアイテムの特定の部分) を条件付きで表示または非表示にする必要がある場合は、いくつかの方法があります。

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 ) 。

于 2013-01-20T23:44:13.907 に答える