TreeView
ウィジェットの内部の仕組みを理解するのが困難です。Kendo コード ライブラリの例、具体的には Ajax 読み込みスニペットを参照しています。
//Ajax binding data
public JsonResult Employees(string id)
{
XElement element = XElement.Load((Server.MapPath("~/App_Data/employees.xml")));
IEnumerable<Employee> result;
if (!string.IsNullOrEmpty(id))
{
//search for id and return it's children
result = FindByID(id, element.Element("Employee")).Element("items").Elements("Employee").Select(e => ToEmployee(e));
}
else
{
//return first level nodes
result = element.Elements("Employee").Select(e => ToEmployee(e)) ;
}
return Json(result, JsonRequestBehavior.AllowGet);
}
//Find the XML element by Id
private XElement FindByID(string id, XElement element)
{...}
//Convert XML element to Object
private Employee ToEmployee(XElement element)
{
return new Employee()
{
id = int.Parse(element.Element("employeeId").Value),
name = element.Element("name").Value,
hasChildren = element.Element("items") != null
};
}
これは使用されるモデルで、実際の XML 構造に対応しています。
public class Employee
{
public int id { get; set; }
public string name { get; set; }
public bool hasChildren { get; set; }
public List<Employee> items { get; set; }
}
ビューは次のコードを実行します。
@(Html.Kendo().TreeView()
.Name("ajaxTree")
.DataTextField("name")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("Employees", "Home");
});
})
)
私を悩ませているのは、この例とまったく同じようにモデルを実装する必要があるという事実です。具体的には、「id」および「hasChildren」プロパティをこの方法で正確に指定する必要があります。たとえば、「id」を「Id」に変更すると、この例は無効になり、TreeView
ロードされません。誰かが次のことで私を助けることができますか?
- バインディングは実際にどのように行われますか?
- 小文字のプロパティを使用してモデルを設計する必要があるのはなぜですか? (奇妙に聞こえるかもしれませんが、(グループ) プロジェクトの残りの書式設定と競合します...)
- 剣道に必要な「id」と「hasChildren」を他のプロパティ(同じ機能、異なる名前)にバインドする方法はありますか?