2013-06-11 3 views
2

TreeView 위젯의 내부 동작을 이해하는 데 어려움이 있습니다. 나는 Kendo code library example를 참조하고, 특히 아약스 로딩 조각은 :Kendo UI Treeview XML에 데이터 바인딩 : "id"에 어떻게 바인딩됩니까?

public class Employee 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public bool hasChildren { get; set; } 
    public List<Employee> items { get; set; } 
} 

보기는 다음과 같은 코드를 실행합니다 :

//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 구조에 해당하는 사용되는 모델이며,

@(Html.Kendo().TreeView() 
.Name("ajaxTree") 
.DataTextField("name")  
.DataSource(source => 
{ 
    source.Read(read => 
    { 
     read.Action("Employees", "Home"); 
    }); 
}) 
) 

나를 괴롭히는 것은 모델이이 예제 에서처럼 정확히 구현되어야한다는 사실입니다. 특히 "id"및 "hasChildren"속성은이 방식으로 정확하게 지정해야합니다. 예를 들어, "id"를 "Id"로 수정하면이 예제가 효과적이지 않고 TreeView이로드되지 않습니다. 누군가 다음과 같이 나를 도울 수 있습니까?

  1. 실제로 바인딩은 어떻게 수행됩니까?
  2. 왜 모델을 소문자 속성으로 디자인해야합니까? (이상하게 들리 겠지만 다른 (그룹) 프로젝트의 서식과 충돌합니다 ...)
  3. 검도가 "id"와 "hasChildren"을 다른 속성에 바인딩하는 방법이 있습니까 (같은 기능, 다른 이름)?

답변

0

질문에 대한 답변이 있는지 확실하지 않습니다.

이 링크 http://demos.kendoui.com/web/treeview/remote-data.html은 모델 데이터가 트리 뷰에 바인딩되는 방식을 이해하는 데 도움이됩니다. 아래 링크를 클릭하십시오.

  1. HierarchicalDataSource - http://docs.kendoui.com/api/framework/hierarchicaldatasource
  2. 데이터 소스 - http://docs.kendoui.com/api/framework/datasource
  3. 모델 - http://docs.kendoui.com/api/framework/model 질문 # 2의

, # 3

예, 다음과 같이 모델의 속성을 구성 할 수 있습니다 :

schema: { 
    model: { 
     id: "EmployeeId", 
     hasChildren: "HasEmployees", 
     children: "EmployeeArray" 
    } 
} 
+0

귀하의 답변에 따라 문제가 해결되었습니다. 나는 문서를 게시하기 전에 읽었습니다. 내 혼란은 내가 본 예제에서 BindTo() 메서드가 로컬 데이터에 사용되었다는 사실에서 비롯된 것 같다. ViewBag를 통하지 않고 Controller Action이 반환 한 데이터에 BindTo()를 사용할 수 있습니까? '.BindTo (DataSource ("read data"), schema ...)와 같은 것입니다. 나는 그것을 알아낼 수 없습니다 ... –

+0

검도의 서버 측 확장에 액세스 할 수 없지만 작업에서 읽을 수 있도록 DataSource를 구성해야하는 작업 방법을 사용하려고합니다. 원래 코드가 이미 그렇게하고 있습니다. BindTo 메서드 대신 해당 코드를 사용하지 못하게하는 이유가 무엇인지 모릅니다. –