Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
Всем доброго дня !

Спрошу здесь, покуда мне ближе этот форум,
и знаю что очень многие(ьольшенство) имеют дело с JS.
Есть на стороне М рутина, которая выдает список областей
+
 s (Er,nmsp,dtbs,rtntxt,rtnobj,glb,journal,n,nod,UCI,Ret,i,n)=""
 d syspatch^FCGIUCI(.nmsp,.dtbs,.rtntxt,.rtnobj,.glb,.journal,.n,.Er)
 f i=1:1 s nod=$o(dtbs(nod)) q:nod=""  d
 . s UCI=$p(dtbs(nod),"/",1)
 . s Ret=Ret_UCI_"|" 
 s %fcgi("o","stdout")=Ret_$c(13,10)
 s %fcgi("o","header","Content-Type")="text/plain"
 q
 ;

На стороне клиента код на JS, который должен отобразить этот список
в браузере.
+
function load_namespace() {
    var str=""
    var callback = function( req ){
    var rou = req.responseText;
    var arr = rou.split('|');
    for (var i = 0; i < arr.length - 1; i++) {
        var name = arr[i];
        var ul = document.getElementById("myvertmenu");
        ul.classList.add("vertmenu");
        var li = document.createElement('li');
        li.appendChild(document.createTextNode(name));
        li.setAttribute("onclick","f_namespace('"+ arr[i] +"')");
      
            var ulchild= document.createElement('ul');
            var lichild = document.createElement('li');
            lichild.appendChild(document.createTextNode("Routins"));
            lichild.appendChild(document.createTextNode("Globals"));
            ulchild.appendChild(lichild);
        ul.appendChild(li); 
        }
    };
  AJAX( "GET", "/gt.m/nms/*" , null, callback );    
}

Не пинайте сильно. Области(имена) отображаются нормально,
а вот никак не получается отобразит дочерний элемент "Routins" и "Globals"
Они должны открыться при нажатие на имя области.

Спасибо.
18 июн 19, 09:17    [21910307]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
Области(имена) отображаются нормально,
а вот никак не получается отобразит дочерний элемент "Routins" и "Globals"

Что именно получает JS? В каком формате?
18 июн 19, 10:13    [21910348]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
Valeriu,

Я конечно понимаю, велосипедостроение наше всё. Но, в мире веба все меняется довольно быстро, и ваш код можно писать лучше применяя доступные публичные инструменты

В вашем случае, полагаю, вы забыли строчку
li.appendChild(ulchild);


Рабочий пример
18 июн 19, 10:18    [21910354]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
Даже с уже устаревшим jQuery код выглядит более читабельным, хотя и тут есть что поменять.

Рабочий пример
18 июн 19, 10:38    [21910363]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
krvsa
Что именно получает JS? В каком формате?

Получаю строку как указал ниже DAiMor.
`TEST|TEST2|....|TESTn`
18 июн 19, 11:04    [21910401]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
Получаю строку как указал ниже DAiMor.
`TEST|TEST2|....|TESTn`

Тебя устроили его примеры с решением твоей проблемы?
19 июн 19, 09:03    [21911203]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
krvsa,
Если честно я с JQuery не работаю ...
Стараюсь все делать на чистом JS, хотя понимаю что это сложнее.
Суть в чем ? Я все эти дебри сделал внутри самого GT.M:
+
 s %fcgi("o","stdout")=%fcgi("o","stdout")_"<ul id=""myvertmenu"" class=""vertmenu"">"_$c(10)
 s %fcgi("o","stdout")=%fcgi("o","stdout")_"    <li><a href=""0"">GT.M  DataBases</a></li>"_$c(10)
    ; ***Menu1 build in M-code
 	s (Er,nmsp,dtbs,rtntxt,rtnobj,glb,journal,n,nod,UCI)=""
 	d syspatch^FCGIUCI(.nmsp,.dtbs,.rtntxt,.rtnobj,.glb,.journal,.n,.Er)
 	f  s nod=$o(dtbs(nod)) q:nod=""  d
 	. s UCI=$p(dtbs(nod),"/",1)
 	. s %fcgi("o","stdout")=%fcgi("o","stdout")_"    <li><a href=""#"" onclick=""f_namespace("_"'"_UCI_"'"_")"">"_UCI_"</a>"_$c(10)
 	. s %fcgi("o","stdout")=%fcgi("o","stdout")_"         <ul>"_$c(10)
 	. s %fcgi("o","stdout")=%fcgi("o","stdout")_"          <li><a href=""#"" onclick=""load_routinedir()""><img src=""images/silk/text_signature.png"">  Routins</a></li>"_$c(10)
 	. s %fcgi("o","stdout")=%fcgi("o","stdout")_"          <li><a href=""#"" onclick=""load_glbdir()""><img src=""images/silk/server_components.png"">  Globals</a></li>"_$c(10)
 	. s %fcgi("o","stdout")=%fcgi("o","stdout")_"         </ul>"_$c(10)
 	. s %fcgi("o","stdout")=%fcgi("o","stdout")_"    </li>"_$c(10)
 s %fcgi("o","stdout")=%fcgi("o","stdout")_"</ul>"_$c(10)

Сейчас хочу вынести отдельно в HTML файле и вызовы делать через Ajax как показал в начале.
Но оказалось что на чистом JS немножко сложнее добиться такого же результата
19 июн 19, 11:05    [21911311]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
2acid
Member

Откуда:
Сообщений: 61
Кажется проще подучить JS, чем на М генерить HTML разметку
19 июн 19, 16:32    [21911697]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
Но оказалось что на чистом JS немножко сложнее добиться такого же результата

Так это смотря каким путем идти...
В JS так же можно сформировать html-текст и записать его в свойство innerHTML нужного элемента.
А можно действовать методами, как сделано у тебя.
21 июн 19, 09:46    [21912662]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
2acid
Кажется проще подучить JS, чем на М генерить HTML разметку

Это очень спорный вопрос...
В вэб "сообществе" нет однозначного ответа. Бывает быстрее "сделать" и передать готовый HTML с делегированием событий на странице, нежели слать данные, а контент формировать с помощью JS...
21 июн 19, 09:48    [21912669]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu, обработчики (onclick) не обязательно пересылать...
Можно использовать "делегирование" событий и сразу "описать" их на странице. А нужные параметры записать в сам тег, их потом считает сам обработчик. ;)

Т.о. ты формируешь и передаешь только контент, а весь JS уже "ждет" его на странице.
21 июн 19, 09:52    [21912670]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
 s %fcgi("o","stdout")=%fcgi("o","stdout")_"<ul id=""myvertmenu"" class=""vertmenu"">"_$c(10)

Не используй двойные кавычки... Одинарные смотрятся удобнее. ;)

 s %fcgi("o","stdout")=%fcgi("o","stdout")_"<ul id='myvertmenu' class='vertmenu'>"_$c(10)
21 июн 19, 09:56    [21912673]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
krvsa
Valeriu, обработчики (onclick) не обязательно пересылать...
Можно использовать "делегирование" событий и сразу "описать" их на странице. А нужные параметры записать в сам тег, их потом считает сам обработчик. ;)

Т.о. ты формируешь и передаешь только контент, а весь JS уже "ждет" его на странице.

Вот пример на жиКвери...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
.uci > ul {
	display: none;
}
</style>
<script type='text/javascript'>
$(function(){
	$('.container .uci').on('click',function(){
		$(this).children('ul').toggle();
	});
	$('.container .uci li').on('click',function(e){
		var obj=$(this);
		var uci=obj.parents('.uci').eq(0).data('uci');
		var type=obj.data('type');
		alert('uci='+uci+', type='+type);
		return false;
	});
});
</script>
</head>
<body>
<div class='container'>
	<ul id="myvertmenu" class="vertmenu">
		<li><a href="0">GT.M  DataBases</a></li>
		<li class="uci off" data-uci='UCI0'><a href="#">UCI 0</a>
			<ul>
				<li data-type='routine'><a href="#"><img src="images/silk/text_signature.png">  Routins</a></li>
				<li data-type='glbdir'><a href="#"><img src="images/silk/server_components.png">  Globals</a></li>
			</ul>
		</li>
		<li class="uci off" data-uci='UCI1'><a href="#">UCI 1</a>
			<ul>
				<li data-type='routine'><a href="#"><img src="images/silk/text_signature.png">  Routins</a></li>
				<li data-type='glbdir'><a href="#"><img src="images/silk/server_components.png">  Globals</a></li>
			</ul>
		</li>
	</ul>
</div>
</body>
</html>

Если картинки стандартные для программ и глобалов - их так же можно исключить из контента, перенеся все в css... ;)
21 июн 19, 10:32    [21912717]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
krvsa
В JS так же можно сформировать html-текст и записать его в свойство innerHTML нужного элемента.

Это я понял, это как в моем случае не требуется скорость и вывести список
пару "областей", которых в GT.M как таковых нету, это самое разумное решение для чайника токового как я ...
Я и пользуюсь
+
://**** Load DB directory(Namespace)
function load_namespace() {
    var selectedNodeContent = "";
    var callback = function( req ){
        var rou = req.responseText;
        var arr = rou.split('|');

        for (var i = 0; i < arr.length - 1; i++) {
        var name = arr[i];
        selectedNodeContent += '<div class="card">'
        selectedNodeContent += '<div class="card-header"><a class="card-link" data-toggle="collapse" href=#"'+ name +'"> "'+ name +'"</a></div>'
        selectedNodeContent += '</div>'
             }
            document.getElementById("accordion").innerHTML =  selectedNodeContent;    
        };
      AJAX( "GET", "/gt.m/nms/*" , null, callback );    
    }
22 июн 19, 17:31    [21913404]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
Что интересно в моем случае, это воспроизвести динамику HTML в М, тоже самое
что и innerHTML ... в JS .
22 июн 19, 18:08    [21913413]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
Я пробовал вот этот вариант:
+
<!DOCTYPE>
<html>
<head>
    <title>Вертикальное accordion меню | pcvector.net</title>
	<link rel="shortcut icon" href="/favicon.ico" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <link href="mstyle.css" rel="stylesheet" type="text/css" />
	<style>
		.demo_container{
			margin:50px auto;
			width:400px;
		}
	</style>
    <script type="text/javascript">
        $(document).ready(function () {
			$('#cssmenu li.has-sub > a').on('click', function(){
				$(this).removeAttr('href');
				var element = $(this).parent('li');
				if (element.hasClass('open')) {
					element.removeClass('open');
					element.find('li').removeClass('open');
					element.find('ul').slideUp();
				}
				else {
					element.addClass('open');
					element.children('ul').slideDown();
					element.siblings('li').children('ul').slideUp();
					element.siblings('li').removeClass('open');
					element.siblings('li').find('li').removeClass('open');
					element.siblings('li').find('ul').slideUp();
				}
			});

			$('#cssmenu>ul>li.has-sub>a').append('<span class="holder"></span>');
        });
    </script>
</head>
<body>


<div class="demo_container">

	<div id='cssmenu'>
		<ul>
		   <li class='active'><a href='index.html'><span>GT.M DataBases</span></a></li>
		   <li class='has-sub'><a href='#'><span>SYS</span></a>
			  <ul>
				 <li class='has-sub'><a href='#'><span>Routines List</span></a>
					<ul>
					   <li><a href='#'><span>RtnName</span></a></li>
					</ul>
				 </li>
			  </ul>
		   </li>
		</ul>
	</div>

</div>
   </body>
</html>

Плюс я сделал на JS
+
 function load_namespace() {
        var callback = function( req ){
        var rou = req.responseText;
        var arr = rou.split('|');
        for (var i = 0; i < arr.length - 1; i++) {
            $('ul').append(
                $('<li class="has-sub"><a href="#" onclick="f_namespace(\'' + arr[i] + '\')"><span> '+ arr[i] +' </span></a>').append(
                    $('ul').append(
                        $('<li><a href="#" onClick="addAnother()"><span>Routines</span></a>').append(
                            $('<ul>')    
                ))));      
            }
        };
      AJAX( "GET", "/gt.m/nms/*" , null, callback );    
    }

В динамике не хочет работать. Может ткнете носом где моя ошибка ?
Не пинайте сильно ...
28 июн 19, 14:19    [21917075]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
В динамике не хочет работать. Может ткнете носом где моя ошибка ?

Такие примеры проще тестить на действующем макете...

Сделай тестовый пример с "имитацией" запроса, например, просто по кнопке что-то сделай, кагбэ это сделал запрос.
После этого можно сделать пошаговое тестирование кода и увидишь, что не так. ;)

Т.к. я уже на выходные...
28 июн 19, 15:49    [21917159]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
krvsa,
Если честно, мне со вложенными уровнями очень трудно спрвляться ..
Везде в инете примеры куча ! но, ВСЕ только с одним уровнем..
Типа:
<ul>
  <li><a href='#'><span>RtnName</span></a></li>
</ul>

Я попробую, как вы советуйте.
Спасибо.
28 июн 19, 16:00    [21917170]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
Если честно, мне со вложенными уровнями очень трудно спрвляться ..

Потому и имеет смысл потренироваться на простых примерах. Потом будешь любую проблему "как говно палкой мешать"...
1 июл 19, 08:07    [21917899]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
krvsa,
Оказывается ВСЕ давно работает ...
Просто не хочет открыть ветви, те вложенные узлы
Все кроется в файле css/mstyle.css
Когда это запускается чисто из примерного файла - работает.
А вот когда в динамике куда я его использую - нет.
Убираю ссылку <link href="/gtmportal/menu/css/mstyle.css" rel="stylesheet" type="text/css" />
работает и здесь, но высвечивает естественно просто, без красоты - открывает все ветви.
3 июл 19, 09:43    [21919605]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu
Когда это запускается чисто из примерного файла - работает.
А вот когда в динамике куда я его использую - нет.

Значит дело не в бабине. (с)
Придется тебе искать факторы, которые "мешают" скриптам или еще чему-то реализовывать задуманное.

Тестовые примеры для того и нужны. Они помогают правильно определять источник проблем...
3 июл 19, 12:39    [21919751]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
vallery
Member

Откуда:
Сообщений: 1
krvsa,
По эл_почте с Вами можно связаться? Вопрос относительно Cache2009
7 июл 19, 18:56    [21922289]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
vallery
По эл_почте с Вами можно связаться? Вопрос относительно Cache2009

Свяжись... А ты ее знаешь?
Но у нас давно 2012.

У нас на сайте есть телефоны для связи...
8 июл 19, 08:07    [21922415]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2715
krvsa,

Он с Украины, так что ему наверно телефон не очень удобно
8 июл 19, 08:48    [21922426]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
На том же сайте указан общий адрес почты... Мой не air, а ksa.
9 июл 19, 14:36    [21923468]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2075
krvsa,
krvsa
Значит дело не в бабине. (с)
Придется тебе искать факторы, которые "мешают" скриптам или еще чему-то реализовывать задуманное.

Вот нашлось время и разобрался.
Оказывается, загружать в начале при загрузки страницы - сработал не правильно...
<html>
    <body onload="InitDB();">
...

А вот уже в конце страницы - уже все нормально.
.....
</div>
<script type="text/javascript">
  window.onload = InitDB();   
</script>  
</body>
</html>
30 июл 19, 12:29    [21937761]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по JS and M  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13234
Valeriu, сейчас более уместно использовать специальный метод для установки обработчиков. ;)
https://msiter.ru/tutorials/javascript/js_htmldom_eventlistener
31 июл 19, 07:33    [21938479]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить