@wolf-9830

Как обработать клик по элементу вложенного списка?

Получаю вложенный список json-ом с сервера. Формирую из него массив объектов TreeNode:
var TreeNode = function() {
      var self = this;
      self.id = -1;
      self.name = '';
      self.children = [];
      return self;
    };

    function formatTree(element) {
        var node = new TreeNode();
        node.id = element.id;
        node.name = element.name;
        if (typeof element.children != "undefined") {
            element.children.forEach(function(item) {
                node.children.push(formatTree(item));
            });
        }
        return node;
    }


И вывожу вложенный список рекурсивным шаблоном:

<ul data-bind="template: {name: 'treeTemplate', foreach: tree}"></ul>
                <button class="button" style="height: 40px; width: 100%; margin-bottom: 7px; border: 1px solid" data-bind="click: back">Назад</button>

...

<script type="text/html" id="treeTemplate">
        <li><button class="button" data-bind="text: name, click: $parent.clickTree"></button></li>
        <!-- ko ifnot: typeof children == "undefined" -->
            <ul data-bind="template: {name: 'treeTemplate', foreach: children}"></ul>
        <!-- /ko -->
    </script>


Вся фишка в функции data-bind="text: name, click: $parent.clickTree"
В ней выводится данные, по которым произошел клик:
self.clickTree = function(data) {
            console.log(data);
        };

Но клик срабатывает только тогда, когда я кликаю по первому элементу списка, т.е. клик не срабатывает, если было нажатие например на children первого элемента, как сделать, чтобы я мог получать TreeNode объект по нажатию на него.
  • Вопрос задан
  • 14 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Hunt4You Севастополь
от 60 000 до 80 000 руб.
Component17 Москва
от 40 000 до 60 000 руб.
от 2 000 до 3 000 usd.
22 марта 2019, в 01:06
4000 руб./за проект
22 марта 2019, в 00:24
10000 руб./за проект