Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JavaScript и #server()# / 20 сообщений из 20, страница 1 из 1
24.06.2011, 15:37
    #37323852
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
есть JavaScript функция которая использует #server(..someMethod())#. Закинул эту функцию в отдельный файл *.js и прикрепил этот файл к странице. Функция работать перестала, я так понимаю из-за #server()#. Как хранить JS функции в отдельных файлах тогда?
...
Рейтинг: 0 / 0
24.06.2011, 15:37
    #37323856
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
cache 5.0.21
...
Рейтинг: 0 / 0
24.06.2011, 15:45
    #37323878
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
Не так все просто.
Когда вы делаете #server()#, компилятор модифицирует теги <HEAD> , <BODY>, причем на разных версиях каше по разному,
а сам server заменяет на вызов javascript кода.
Вы это все увидите, если посмотрите на исходник сгенерированной страницы.

По сабжу - скорее всего никак.
...
Рейтинг: 0 / 0
24.06.2011, 16:14
    #37323960
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
Блок А.Н.Не так все просто.
Когда вы делаете #server()#, компилятор модифицирует теги <HEAD> , <BODY>, причем на разных версиях каше по разному,
а сам server заменяет на вызов javascript кода.
Вы это все увидите, если посмотрите на исходник сгенерированной страницы.

По сабжу - скорее всего никак.
угу, вижу. не получиться... ну ладно :) спасибо
...
Рейтинг: 0 / 0
24.06.2011, 17:20
    #37324106
evgkrukov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwer, я храню такие функции в отдельном файле с расширением .inc.
...
Рейтинг: 0 / 0
24.06.2011, 17:49
    #37324156
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
Это всего лишь текст ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
Class csp.simple Extends %CSP.Page {

ClassMethod OnPage() As %Status {
 &html<<html><head></head>>
 
 &html<<!--Гипер ивенты от ISC при дефолтной конфигурации можно прописать так -->
 <script type="text/javascript" src="/csp/broker/cspxmlhttp.js"></script>
 <script type="text/javascript" src="/csp/broker/cspbroker.js"></script>
 >
 ;но лучше так :
 ;w ..HyperEventHead() 
 
 &html<<body>
  <div id="datetime"></div>
  <button id="server">server</button>
  <button id="call">call</button>
 >
 
 ;сгенерированные ajax вызовы лучше сложить в отдельный объект JS на странице
 ;Вынести его в отдельный javaскрипт не получится, ибо динамически формируются имена функций
 ;а вот в отдельный метод Каше ...
 d ..wJsServerMethods()
 
 ;зато остальной можно выносить в отдельный файл
 &html<<script type="text/javascript">
 
 //сократим часто используемый код 
 var $=function(id){return document.getElementById(id)}
 
 //универсальная привязка обработчиков событий
 var $bind=("v"=="\v")?function(o,e,h){ //IE
  o.attachEvent("on"+e,h);
 }:function(o,e,h){ //other
  o.addEventListener(e,h,false);
 }
 
 function changeHTML(html){ //какая нибудь чисто клиентская функция
  $("datetime").innerHTML=html;
 }
 
 $bind(window,"load",function(){ //после загрузки страницы понеслась 
   
   $bind($("server"),"click",function(){ //динамическая привязка к событию
     changeHTML(window.serverMethods.method1());
   });
   
   $bind($("call"),"click",function(){
     window.serverMethods.method2("window.changeHTML")
   });
  
 });
</script>>  
 
 &html<</body></html>>
 Quit $$$OK
}

///
ClassMethod wJsServerMethods() {
 &html<<script type="text/javascript">
 window.serverMethods={
   method1: function(){ return #server(..Method1())#; }
   ,method2: function(/*callback function name*/ fn){ #call(..Method2(fn))#; return; }
 } 
</script>> 
}

///Синхронный возвращает результат
ClassMethod Method1(){  q $zdt($h, 3 ) }

///Асинхронный результат не возвращает, но может написать его в javascript
ClassMethod Method2(func as %String="alert"){  w func,"(",..QuoteJS(..Method1()),");" }

}
...
Рейтинг: 0 / 0
27.06.2011, 09:56
    #37325551
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwerБлок А.Н.Не так все просто.
Когда вы делаете #server()#, компилятор модифицирует теги <HEAD> , <BODY>, причем на разных версиях каше по разному,
а сам server заменяет на вызов javascript кода.
Вы это все увидите, если посмотрите на исходник сгенерированной страницы.

По сабжу - скорее всего никак.
угу, вижу. не получиться... ну ладно :) спасибо

Ну вот... Как же не получится... получится, и еще как. Вас же никто не заставляет иметь файл с расширением js для содержания скриптов.

Код: plaintext
<script type="text/javascript" src="/csp/user/superscript.csp"></script>

Должно получиться. Если будут проблемы, в начало этого csp файла можно внутри коммента вставить как бы открытие скрипта (лет 5-ть назад так работало, а сейчас, думаю, и подавно)
...
Рейтинг: 0 / 0
27.06.2011, 10:19
    #37325583
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
kolesovAndrewQwerпропущено...

угу, вижу. не получиться... ну ладно :) спасибо

Ну вот... Как же не получится... получится, и еще как. Вас же никто не заставляет иметь файл с расширением js для содержания скриптов.

Код: plaintext
<script type="text/javascript" src="/csp/user/superscript.csp"></script>

Должно получиться. Если будут проблемы, в начало этого csp файла можно внутри коммента вставить как бы открытие скрипта (лет 5-ть назад так работало, а сейчас, думаю, и подавно)
поэкспериментирую! спасибо
...
Рейтинг: 0 / 0
27.06.2011, 10:37
    #37325600
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
к сожалению когда подключаю так :
Код: plaintext
1.
2.
<script src="scripts.csp">
</script>
то в результате в файле добавляется код:
Код: plaintext
1.
2.
3.
<script language="JavaScript" src="/csp/broker/cspxmlhttp.js"></script><script language="JavaScript" src="/csp/broker/cspbroker.js"></script>//<script language='javascript'>
function init() { 
......
}
Получается внутри <script> находиться еще один <script> и ничего не работает
...
Рейтинг: 0 / 0
27.06.2011, 10:43
    #37325604
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
А вот через <CSP:INCLUDE page="scripts.csp"/> вроде как работает! правда скрипты в тег body добавляются...
...
Рейтинг: 0 / 0
27.06.2011, 13:33
    #37325820
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwer,
стандарт позволяет включать скрипты до закрывающего тега body
...
Рейтинг: 0 / 0
27.06.2011, 14:50
    #37325962
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
doublefintAndrewQwer,
стандарт позволяет включать скрипты до закрывающего тега body
я понимаю. просто в <head> как то привычнее чтоли :)
...
Рейтинг: 0 / 0
27.06.2011, 16:36
    #37326180
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwer, а в некоторых случаях именно туда (перед </body>) и рекомендуют помещать скрипты :)
...
Рейтинг: 0 / 0
27.06.2011, 19:37
    #37326423
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
В последнее время именно перед </body> и помещаю, программа гораздо легче читается.
(И вроде как это еще немного увеличивает скорость загрузки в браузере?)
...
Рейтинг: 0 / 0
27.06.2011, 20:34
    #37326476
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
Блок А.Н.,
все зависит от типа страницы, но основной смысл в том, что пока не загрузится скрипт, не будет показано содержимое страницы, поэтому на страницах с большим содержанием html - html пускают вперед, а в конце добавляют доп. скрипты (js-библиотеки).
Аналог такого решения неуниверсальный аттрибут defer тега script.
А вот если интерфейс формируется на клиенте с помощью js...

В каше-кормилице эту оптимизацию можно было увидеть на зен страницах - в 2007-2008 версии скрипты из параметра JSINCLUDES включали в начале странице, в более поздних версиях включается в конце страницы (ох, вспоминал добрыми словами, наверно икалось ... :)
...
Рейтинг: 0 / 0
28.06.2011, 02:11
    #37326674
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwerк сожалению когда подключаю так :
Код: plaintext
1.
2.
<script src="scripts.csp">
</script>
то в результате в файле добавляется код:
Код: plaintext
1.
2.
3.
<script language="JavaScript" src="/csp/broker/cspxmlhttp.js"></script><script language="JavaScript" src="/csp/broker/cspbroker.js"></script>//<script language='javascript'>
function init() { 
......
}
Получается внутри <script> находиться еще один <script> и ничего не работает

А вот такую конструкцию в начало файла скриптов если вставить:
Код: plaintext
1.
2.
/*
<html><head></head><body></body></html>
*/
?
...
Рейтинг: 0 / 0
28.06.2011, 09:47
    #37326791
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
kolesovAndrewQwerк сожалению когда подключаю так :
Код: plaintext
1.
2.
<script src="scripts.csp">
</script>
то в результате в файле добавляется код:
Код: plaintext
1.
2.
3.
<script language="JavaScript" src="/csp/broker/cspxmlhttp.js"></script><script language="JavaScript" src="/csp/broker/cspbroker.js"></script>//<script language='javascript'>
function init() { 
......
}
Получается внутри <script> находиться еще один <script> и ничего не работает

А вот такую конструкцию в начало файла скриптов если вставить:
Код: plaintext
1.
2.
/*
<html><head></head><body></body></html>
*/
?
Такое проходит, но в этом случае методы обьявленные в основном файле csp, например:
Код: plaintext
1.
2.
3.
<script language="cache" method="cacheMethod" arguments="NT:%String">
....
</script>
не видны для функций в файле scripts.csp (ну логично, это разные csp страницы). Т.е. чтоб работал и JS и были доступны методы Cache они должны быть в 1 файле. С помощью конструкции <script src="..."> такой файл не подключиться. <CSP:INCLUDE> вроде пока одно из лучших решений
...
Рейтинг: 0 / 0
28.06.2011, 11:00
    #37326919
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwerне видны для функций в файле scripts.csp (ну логично, это разные csp страницы). Т.е. чтоб работал и JS и были доступны методы Cache они должны быть в 1 файле.
False
...
Рейтинг: 0 / 0
28.06.2011, 13:32
    #37327186
AndrewQwer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
doublefintAndrewQwerне видны для функций в файле scripts.csp (ну логично, это разные csp страницы). Т.е. чтоб работал и JS и были доступны методы Cache они должны быть в 1 файле.
False
Почему False? если есть csp страница scripts.csp в ней используется некий джаваскрипт который вызывает метод Cache
Код: plaintext
1.
2.
3.
function f() {
#server(..CacheMethod())#
}
но этого метода в scripts.csp нету, он находится в файле куда scripts.csp будет подключен через <script src="scripts.csp">. У меня так не работает.
...
Рейтинг: 0 / 0
28.06.2011, 13:47
    #37327226
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaScript и #server()#
AndrewQwer
Код: plaintext
<CSP:INCLUDE>
вроде пока одно из лучших решений
В своё время пробовали разные варианты... Остановились вот на таком

Код: plaintext
1.
<!--#include virtual="/adm/inc/nmenu.csp"-->
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / JavaScript и #server()# / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]