0

だから問題は何ですか。特定のパラメーター (ID - JSON から渡される) を使用して WinJS リスト ビューからアイテムを除外したい。どうやってするか?

私が試したこと:

a) データを someView.itemDataSource にプッシュする前に、この関数で処理します (動作しますが、汚れているように見えます)。

    fldView.itemDataSource = this._processItemData(Data.items.dataSource);
    ....
     _processItemData: function (data) {
        for (var i = data.list.length; i >= 1; i--) {
            if (data.list._groupedItems[i]) {
                if (data.list._groupedItems[i].groupKey == 'Folders')
                    continue;
                else {
                    if (data.list._groupedItems[i].data.folderID) {
                        data.list.splice(i - 1, 1);
                    }
                }
            }
        }
        return data;
    }

b) 2 つの条件付きテンプレートを使用する従来の方法 (機能しません):

 fldView.itemTemplate = this.getItemTemplate;
    ....
    getItemTemplate: function(promise){
                return promise.then(function(item){
                    var
                        itemTemplate = null,
                        parent = document.createElement("div");

                    if(item.data.folderID){
                        itemTemplate = document.querySelector('.hideItemTemplate')
                    }else{
                        itemTemplate = document.querySelector('.itemTemplate')
                    }
                    //console.log(item.data.folderID);
                    itemTemplate.winControl.render(item.data, parent);
                    return parent;
                })
            }

2 つの HTML テンプレート

<div class="itemTemplate" data-win-control="WinJS.Binding.Template">
        <div class="item">
            <img class="item-image" src="#" data-win-bind="src: backgroundImage; alt: title" />
            <div class="item-overlay">
                <h4 class="item-title" data-win-bind="textContent: title" style="margin-left: 0px;"></h4>
                <h6 class="item-subtitle win-type-ellipsis" data-win-bind="textContent: subtitle" style="margin-left: 0px; margin-right: 4.67px;"></h6>
            </div>
        </div>
    </div>
    <div class="hideItemTemplate" data-win-control="WinJS.Binding.Template">
        <div class="display-none"></div>
    </div>

および CSS 表示: なし

.hideItemTemplate, .display-none{
    display:none;
}

前もって感謝します!

4

1 に答える 1

1

array.filter を使用してWinJS.Binding.Listを構築する前にアイテムをフィルター処理するか、構築後にリストでフィルター プロジェクションを実行することをお勧めします。グループ化が必要な場合は、フィルタリングされたリストでグループ化を行うことができます。

var list; // assuming this is all data items
var filteredList = list.createFiltered(function filter(item)
    {
        if (item.FolderID)
            return false;
        else
            return true;
    });
var groups = filteredList.createGrouped(...);
于 2013-04-08T03:56:49.187 に答える