Я обновляю приложение 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;
});
});