Как заставить Jquery-Dynatree использовать полный URL для дочерних узлов - PullRequest
0 голосов
/ 29 ноября 2018

Я обновляю приложение ruby ​​on rails, которое использует jquery-dynatree для создания дерева отображения данных.Дерево прекрасно создается со всеми соответствующими родительскими и дочерними узлами.У меня проблема в том, что дочерние узлы иногда отображают полный URL-адрес данных, а иногда относительный URL-адрес, в зависимости от среды, в которой они развернуты.

В нашей среде разработки ссылки отображаются корректно:

<a href="http://localhost:3000/victuallers/654"><span class="td_first" title="Victualler">Bates, George</span></a>

В нашей тестовой среде они создаются как относительный путь:

<a href="/victuallers/654"><span class="td_first" title="Victualler">Bates, George</span></a>

Фактический путь долженbe

https://uat.warwickshire.gov.uk/victuallersdb/victuallers/654

Странно, но наша живая среда (настроенная так же, как и наш тест) отображает полный путь.Единственная разница между UAT и LIVE состоит в том, что LIVE находится на более старой версии рельсов.JavaScript такой же и не был изменен.Я понизил гем JQUERY, чтобы соответствовать живой и все еще получить ту же проблему.

Я использую jquery-dynatree версии 1.2.4 (хотя 1.2.8 также имеет ту же проблему).

Javascript, который создает дерево, показан ниже.

$(function() {
  $("#tree").dynatree({
    autoCollapse: true,
    initAjax: {
      url: $('#indexes-data').data('dynatree'),
      //use data attribute in indexes div to use page parameter in JS
      data: {
        page: $('#indexes-data').data('page'),
        show: $('#indexes-data').data('show'),
        order: $('#indexes-data').data('order'),
        filter: $('#indexes-data').data('filter')
      }
    },

    onActivate: function(node) {
      if (node.data.href) {
        window.location(node.data.href, node.data.target)
      }
    },

    onPostInit: function(isReloading, isError) {

      if (jQuery(tree).dynatree("getRoot").getChildren() == undefined) {
        $("ul.dynatree-container").css("border", "none");
      }
    },

    onLazyRead: function(node) {
      var params = getAjaxParams(node)

      node.appendAjax({
        url: $('#indexes-data').data('dynatree'),
        debugLazyDelay: 750,
        data: {
          order: $('#indexes-data').data('order'),
          node: params[0],
          arg1: params[1],
          arg2: params[2]
        }
      });
    },

    onCustomRender: function(node) {
      if (node.data.title.indexOf("~") === -1) {
        return false;
      }
      var result = getColumnNames($('#indexes-data').data('order'));

      var cols = node.data.title.split("~"),
        html = "<a class='dynatree-title' href='#'>";
      if (cols[0].length == 0) {
        html += "<a href=" + node.data.href + "><span class='td_first' title='" + result[0] + "'>" + result[0] + " not recorded" + "</span></a>";
      } else
        html += "<a href=" + node.data.href + "><span class='td_first' title='" + result[0] + "'>" + cols[0] + "</span></a>";
      for (var i = 1; i < cols.length; i++) {
        if (cols[i].length > 25) {
          html += "<span class='td' title='" + result[i] + "'>" + cols[i].substring(0, 21) + "..</span>";
        } else
          html += "<span class='td' title='" + result[i] + "'>" + cols[i] + "</span>";
      }
      return html + "</a>";
    },

  });
  $("#btnCollapseAll").click(function() {
    $("#tree").dynatree("getRoot").visit(function(node) {
      node.expand(false);
    });
    return false;
  });

});

Я прочитал всю документацию и не могу найти ничего о том, как он устанавливает дочерние пути или если есть настройка, которая заставляет полный URL-адрес в дочернем пути.

Вернуться к моему вопросу.Есть ли возможность принудительно указывать полный URL-путь в jquery-dynatree при создании дочернего узла?

если нет, то единственное, что я могу сделать, это изменить JS выше, чтобы проверить, начинается ли путь с «https», и добавить недостающую часть относительного корня, если нет.EG

<a href="/victuallerdb/victuallers/654"><span class="td_first" title="Victualler">Bates, George</span></a>

Любая помощь будет принята с благодарностью.Большое спасибо!

ОБНОВЛЕНИЕ:

Исправленный код, приведенный ниже, выполняет быструю и грязную проверку URL-адреса узла и, при необходимости, включает относительный путь.Это обходной путь и не отвечает на мой первоначальный вопрос.

$(function() {
  $("#tree").dynatree({
    autoCollapse: true,
    initAjax: {
      url: $('#indexes-data').data('dynatree'),
      //use data attribute in indexes div to use page parameter in JS
      data: {
        page: $('#indexes-data').data('page'),
        show: $('#indexes-data').data('show'),
        order: $('#indexes-data').data('order'),
        filter: $('#indexes-data').data('filter')

      }
    },

    onActivate: function(node) {
      if (node.data.href) {
        window.location(node.data.href, node.data.target)
      }
    },

    onPostInit: function(isReloading, isError) {

      if (jQuery(tree).dynatree("getRoot").getChildren() == undefined) {
        $("ul.dynatree-container").css("border", "none");
      }
    },

    onLazyRead: function(node) {
      var params = getAjaxParams(node)

      node.appendAjax({
        url: $('#indexes-data').data('dynatree'),
        debugLazyDelay: 750,
        data: {
          order: $('#indexes-data').data('order'),
          node: params[0],
          arg1: params[1],
          arg2: params[2]
        }
      });
    },

    onCustomRender: function(node) {
      if (node.data.title.indexOf("~") === -1) {
        return false;
      }
      var result = getColumnNames($('#indexes-data').data('order'));

      var cols = node.data.title.split("~"),
        html = "<a class='dynatree-title' href='#'>";
      if (cols[0].length == 0) {
        // Check to see if UAT or LIVE to amend path accordingly
        var urlPath = node.data.href;
        if (urlPath.substring(0, 1) == '/') {
          html += "<a href=" + "/victuallersdb/" + node.data.href + "><span class='td_first' title='" + result[0] + "'>" + result[0] + " not recorded" + "</span></a>";
        } else {
          html += "<a href=" + node.data.href + "><span class='td_first' title='" + result[0] + "'>" + result[0] + " not recorded" + "</span></a>";
        }
      } else {
        // Check to see if UAT or LIVE to amend path accordingly
        var urlPath = node.data.href;
        if (urlPath.substring(0, 1) == '/') {
          html += "<a href=" + "/victuallersdb/" + node.data.href + "><span class='td_first' title='" + result[0] + "'>" + cols[0] + "</span></a>";
        } else {
          html += "<a href=" + node.data.href + "><span class='td_first' title='" + result[0] + "'>" + cols[0] + "</span></a>";
        }
      }
      for (var i = 1; i < cols.length; i++) {
        if (cols[i].length > 25) {
          html += "<span class='td' title='" + result[i] + "'>" + cols[i].substring(0, 21) + "..</span>";
        } else {
          html += "<span class='td' title='" + result[i] + "'>" + cols[i] + "</span>";
        }
      }
      return html + "</a>";
    },

  });
  $("#btnCollapseAll").click(function() {
    $("#tree").dynatree("getRoot").visit(function(node) {
      node.expand(false);
    });
    return false;
  });

});
...