2016-06-28 1 views
0

ネストされたJSONからフィルタフィールド:剣道のListView - 私は私の剣道のListViewに以下の<code>JSON</code>のデータを使用しています

[ 
    { 
    "Id": 2, 
    "Name": "My Name", 
    "Address": "123 Sesame Street", 
    "City": "My City", 
    "State": "MO", 
    "ProductTypes": [ 
     { 
     "Id": 2, 
     "Name": "Cage Free" 
     }, 
     { 
     "Id": 3, 
     "Name": "Free-Trade" 
     }, 
     { 
     "Id": 4, 
     "Name": "GAP" 
     }, 
     { 
     "Id": 6, 
     "Name": "Grass Fed" 
     } 
    ] 
    } 
] 

は今ここに私の目標/問題です。チェックボックスをオンにしてフィルタリングしたいフィールドがProductTypes.Nameフィールドのときにデータソースをフィルタリングしたいと思います。

しかし、これを正しく動作させる方法がわかりません。

profileDataSource: new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url: "/Profile/GetAllProfiles", 
      dataType: "json" 
     } 
    }, 
    schema: { 
     model: { 
      fields: { 
       Id: { type: "number", editable: false, nullable: true }, 
       Name: { type: "string" }, 
       ProductTypes_Name: { type: "string", from: "ProductTypes.Name" } 
      } 
     } 
    } 
}) 

そして、ここで私は現在フィルタリングしようとしている方法ですが、それは働いていない:ここで

は私 DataSourceある

$("#profileCertificationsListView").on("click", "input[type=checkbox]", function() { 
    viewModel.profileDataSource.filter({ 
     filters: [ 
      { field: "ProductTypes_Name", operator: "eq", value: $(this).attr("name") } 
     ] 
    } 
}); 

私は "の名前を持つチェックボックスにチェックを入れた場合ケージフリー "の場合、リストビュー内のすべての項目が非表示になります。

----- UPDATEは-----私は私の問題への解決策ではこれは私が今働いてきたものである@のスレシュ-C

の助けのおかげで到着しました

$("#profileCertificationsListView").on("click", "input[type=checkbox]", function() { 
    var name = $(this).attr("name"); 
    var list = $("#profileDirectoryListView").data("kendoListView").dataSource.data(); 
    var filtered = []; 
    for (var i = 0; i < list.length; i++) { 
     for (var j = 0; j < list[i].ProductTypes.length; j++) { 
      if (list[i].ProductTypes[j].Name === name) { 
       filtered.push(list[i]); 
      } 
     } 
    } 

    $("#profileDirectoryListView").data("kendoListView").dataSource.data(filtered); 
}); 

答えて

1

私は同様の要件を満たしており、ネストされたJSONデータにフィルタを適用するために解析関数を使用しました。詳細については、this threadを参照してください。

スキーマは次のようになります。助けのための

schema: { 
 
    parse: function (d) { 
 
    var filtered = []; 
 
    for (var i = 0; i < d.length; i++) { 
 
     for(var j=0; j < d[i].ProductTypes.results.length; j++) { 
 
     if (d[i].ProductTypes.results[j].Name == "Cage Free") 
 
      filtered.push(d[i]); 
 
     } 
 
    } 
 
    return filtered; 
 
    } 
 
}

+0

ありがとう!私はあなたのロジックを取ったが、それをスキーマに置くのではなく、チェックボックスがチェックされたときに呼び出される私の関数で使った。私は自分のポストを自分の解決策で更新するつもりですが、自分の解決策に到達するのに役立つので、あなたの答えを最良の答えとして選んでいきます。 :) – Quiver

関連する問題