2

WinJ を学習していますが、アプリに問題があります。Gridlayout に表示する Grouped ListView があります。私はテンプレートを使用しており、テンプレートのヘッダーには 3 つのボタンがあります。私のJavascriptには、リストを重要度でフィルタリングしてからグループ化する機能があります。ボタンをクリックすると、重要度が渡され、フィルターで使用されます。私が抱えている問題は、ボタンがクリックされたときにフィルタリングとグループ化を行う関数が呼び出されるが、表示が変わらないことです。

サイトを検索したところ、役立つと思われるトピックがいくつか見つかりましたが、それらはすべて Android アプリに関するものでした。

誰が私が間違っているのか教えてもらえますか?

コードスニペット:

[データ.js]

(function () {
  "use strict";

  var groupedItemsList;
  var jobStatusCriticality = "";
  var groupedJobs, filteredDataList;

  var dataList = new WinJS.Binding.List();

  function listData() { //removed for web}

  WinJS.Namespace.define("JobGroup.Functions", {
    setupJobGroup: function setupGroup(jsc) {
        if (jsc != "") {
          filteredDataList = dataList.createFiltered(
                function (dataItem) {
                    if (dataItem.jobCriticality == jsc) {
                        return true;
                    }
                    else {
                        return false;
                    }
                }
          );
          filteredDataList.notifyReload();
        }
        else {
            filteredDataList = dataList;
        }

        groupedJobs = filteredDataList.createGrouped(
            function (dataItem) {
                return dataItem.jobStatus;
            },
            function (dataItem) {
                return { status: dataItem.jobStatus };
            },
            function (first, second) {
                return first.charCodeAt(0) - second.charCodeAt(0);
            }
        );
    }
});

JobGroup.Functions.setupJobGroup(jobStatusCriticality);
WinJS.Namespace.define("DataExample", { myList: groupedJobs });
WinJS.UI.processAll().then(listData);

[デフォルト.html]

<div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template">
  //remove for web
</div>

<div id="headerTemplate" data-win-control="WinJS.Binding.Template">
  <div id="sortType"> 
    <div id="sortAll"><span><button id="viewAllBtn" type="button" onclick="JobGroup.Functions.setupJobGroup('')">View All</button></span></div>
    <div id="sortCritical"><span><button id="viewCriticalBtn" type="button" onclick="JobGroup.Functions.setupJobGroup('CRITICAL')">Critical</button></span></div>
    <div id="sortWarning"><span><button id="viewWarningBtn" type="button" onclick="JobGroup.Functions.setupJobGroup('WARNING')">Warning</button></span></div>
  </div>
</div>

<div id="groupedListView"
  data-win-control="WinJS.UI.ListView" 
  data-win-options="{itemDataSource: DataExample.myList.dataSource, 
    itemTemplate: select('#mediumListIconTextTemplate'),
    groupDataSource: DataExample.myList.groups.dataSource,
    groupHeaderTemplate: select('#headerTemplate'),
    layout: {type: WinJS.UI.GridLayout}}">
</div>

[default.js] //標準のデフォルト コードを含む

4

1 に答える 1

1

クイックスキャンなので、これで少し遊ぶ必要があるかもしれませんが、これは大まかな範囲にあると思います...

ListViewを新しいdataSourceで更新する必要があります。あなたが今配線している方法で、実際にはgroupedJobsであるmyList.dataSourceにListをバインドします。ボタンをクリックすると、新しいデータ並べ替えが作成されますが、 createGroupedはまったく新しいオブジェクトを作成するため、何かが変更されたというListViewへの通知はありません。ListViewはまだ古いオブジェクトにバインドされています。通話中

groupedListView.winControl.itemDataSource = groupedJobs.dataSource;
groupedListView.winControl.groupDataSource = groudedJobs.groups.dataSource;

listData関数の最後に、私が思うトリックを行うでしょう。

于 2012-12-13T14:58:13.863 に答える