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