--- title: Views slug: Places/Views tags: - Places ---
뷰는 nsINavHistoryResult 개체를 사용자에게 표시하는 방법입니다. 뷰는 nsINavHistoryService.idl에 정의된 nsINavHistoryResultViewer 인터페이스를 구현합니다.
대부분의 애플리케이션에서 내장 뷰를 포함한 플레이스 콘트롤 중의 하나를 사용하면 충분하고 자신의 뷰를 사용하는 복잡함을 피할 수 있습니다. 더 자세한 사항은 Instantiating Views를 참고하시기 바랍니다.
nsINavHistoryResult에 viewer
속성을 지정하여 뷰를 등록합니다. 이 때, 결과는 주어진 뷰의 result
속성을 지정하게 됩니다.뷰의 결과 속성을 명시적으로 지정하면 안됩니다. 뷰를 초기화하려면 viewer
속성을 null
로 지정합니다. 이는 뷰의 결과 속성 또한 null
로 지정하게 합니다.
참조 고리에 대해 주의하십시오. 뷰와 결과는 모두 서로에 대한 참조를 가지고 있습니다. 이 개체들을 삭제하려면 result.viewer
를 null
로 지정하여 이 고리를 없애야 합니다. 내장 트리 뷰(아래를 참고하십시오)는 이를 자동으로 처리합니다. 트리가 소멸되거나 다른 nsITreeView가 트리와 결합하면 트리는 nsITreeView.tree = null
를 호출합니다. 뷰어는 이 경우를 감지하고 자신을 결과에서 분리합니다.
가장 흔한 형식의 뷰는 트리 콘트롤이지만 이는 구현하기가 상대적으로 어려운 콘트롤이기도 합니다. 그러므로, 플레이스는 여러분이 결과를 트리 뷰에 표시하기를 원하는 경우를 위하여 내장 뷰 개체를 제공합니다. 이는 browser/components/places/content/treeView.js
에 구현되어 있습니다.
이 개체는 nsINavHistoryResultViewer와 nsITreeView를 모두 구현합니다. 그러므로 이 개체를 사용하면 결과(플레이스 질의 시스템 참고)와 트리 사이를 중개할 수 있습니다.
var result = historyService.executeQuery(...); // your places query result var tree = document.getElementById("mytree"); // your tree control var showRootNodeInTree = true; var treeviewer = new PlacesTreeView(showRootNodeInTree); result.viewer = treeviewer; tree.view = treeviewer.QueryInterface(Components.interfaces.nsITreeView);
내장 트리 뷰는 (nsINavHistoryService.idl에 선언된) nsINavHistoryResultViewObserver를 구현한 관찰자(observer) 인터페이스를 붙일 수도 있습니다. 이 관찰자 인터페이스를 이용하면 외부 콤포넌트는 어떤 일이 발생하는지 확인하고 적절한 동작을 취할 수 있습니다. 예를 들어, 플레이스 트리에서는 콘트롤러가 붙어서 무엇인가 트리에 드래그 앤 드롭되는지 알아차릴 수 있습니다. 그리고 나서 적절한 동작을 취합니다.
사용자 정의 트리 뷰가 필요할 때는 여러분 자신의 클래스 안에 nsINavHistoryResultTreeViewer를 둘러싸는 것이 가장 쉽습니다. 예를 들어, 특별한 첫 번째 행을 구현하려면 여러분의 개체는 첫 번째 행에 대한 nsITreeView 응답을 제공하고 다른 모든 메시지는 하나 이동한 색인과 함께 내장 트리 뷰에 전달하면 됩니다.
nsINavHistoryResultNode.viewIndex
속성은 뷰에 사용하기 위하여 명시적으로 제공됩니다. 이 값은 각 노드가 생성될 때 -1로 초기화됩니다. 이 값을 사용하여 보이는 노드는 추적할 수 있습니다. 내장 트리 뷰어는 노드가 켜진 행의 색인을 보관하기 위하여 이 속성을 사용합니다.
nsINavHistoryResultViewer 또한 관찰자 인터페이스를 가지고 있어서 nsINavHistoryResultViewObserver가 변화를 관찰할 수 있도록 합니다. 그러나 이 관찰자 인터페이스는 트리만을 위한 것입니다. bug 337638는 이를 nsINavHistoryResultTreeViewer 개체로 옮기기 위한 것입니다. nsINavHistoryResultViewer의 다른 구현은 자신의 관찰자를 이용해야 합니다.