Generic tree directive
ThesfTree directive enables you to display items hierarchically and provides you with the functionality to retrieve the selected item. You can use the directive to display hierarchical tree in the frontend, as well as in the backend. For example, on a page, as well as in a widget designer.
The sfTree is a directive with an isolated scope that is defined in a module with the same name: sfTree.
For more information, see Isolating the Scope of a Directive.
Attributes
The sfTree directive exposes the following attributes:
|
Attribute |
Description |
|
|
Accepts a callback function that must provide a promise with the array of items that are going to be displayed. The callback must return the root items or the child items of the currently selected node. The callback function is invoked during the initial load of the |
|
|
Accepts a scope variable that references the identifier field of the selected item. If there is no selected item, the value of this variable is |
|
|
Specifies which property value is to be exposed in the |
|
|
Specifies whether the tree will be expanded when an item is selected. |
|
|
Specifies whether the tree allows selected items to be deselected when they are clicked again. If an item is deselected, the value of the |
|
|
Allows you to override the template of the tree. |
|
|
Specifies the assembly where the template of the tree is located. |
|
|
Allows you to override the item template of the tree. |
|
|
Specifies the assembly where the item template of the tree is located. |
|
|
Accepts the name of the scope variable that determines whether a node has children. If this attribute value is not explicitly specified, the |
Add the generic tree directive
The following example demonstrates how to add a generic tree directive in a widget designer's view.
To enable AngularJs to link the sfTree directive in your custom designer view, you must load the script of the directive and add a dependency to the module.
Perform the following:
-
Sitefinity CMS automatically registers the scripts you need and, if no other designer view with explicitly set priority exists, Sitefinity CMS sets your designer view priority 1. In case you need to have full control over the scripts that are loaded or you want to set custom priority, you can alternatively create your own
DesignerView.YourView.jsonfile. If you have aJSONfile that matches the convention (even if empty), this automatic scripts registration will not occur. In yourDesignerView.YourView.jsonfile, add a scripts array.
Use the following code:JSON{ "priority": 1, "components" : ["sf-tree"] } -
In your
designerview-yourview.jsfile, place the following code snippet:JavaScript(function () { var designerModule = angular.module('designer'); angular.module('designer').requires.push('sfTree'); designerModule.controller('SettingsCtrl', ['$scope', '$q', function ($scope, $q) { $scope.requestChildrenCallback = function (parentObj) { parentObj = parentObj || {}; var parent = parentObj.IsParent; var result = $q.defer(); if (!parent) { result.resolve([{ Key: '1', Title: 'Title Root 1', IsParent: true }, { Key: '2', Title: 'Root 2', IsParent: false }]); } else { result.resolve([{ Key: parentObj.Key + '#1', Title: '1st child of ' + parentObj.Key, IsParent: true }, { Key: parentObj.Key + '#2', Title: '2nd child of ' + parentObj.Key, IsParent: false }]); } return result.promise; }; }]); // Subscribe to selection event $scope.$on('sf-tree-item-selected', function (event, item) { }); })();The code above is invoked during the initial load of the
sfTreedirective and two root elements are added to the tree. If you select an item which is a parent, the tree expands and invokes the function. As a result, two more elements are added under the currently selected node.
If thesf-has-children-fieldattribute is present, its scope variable is evaluated. If the attribute is not present, all elements of the tree visually appear as if they have children. If you try to expand such an element, the response is an empty array and the item no longer appears as a parent. -
In your
DesignerView.YourView.cshtmlfile, place the following tag where you want to render thesfTreedirective:HTML<sf-tree sf-model="selectedItemId" sf-request-children="requestChildrenCallback(parent)" sf-identifier="Key" sf-has-children-field="IsParent" sf-expand-on-select/>
Subscribe to selection event
To provide notification when an item is selected the sfTree directive emits a custom selection event. To subscribe to the selection event, use the code in Step 2 of the above procedure.