Javascript в Icms2

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1858
Подскажите схему работы. Имеем js:
Код JAVASCRIPT:
  1. var icms = icms || {};
  2.  
  3. icms.test = (function ($) {
  4.  
  5. this.onDocumentReady = function(){
  6.  
  7. var add_name = 'test';
  8.  
  9. }
  10.  
  11. this.new_func = function(){
  12.  
  13. var f_name = 'old';
  14.  
  15. to_name = f_name + add_name;
  16.  
  17. return to_name;
  18.  
  19. }
  20.  
  21. return this;
  22.  
  23. }).call(icms.test || {},jQuery);
Как получить переменную "add_name" внутри функции "new_func" без передачи ее параметром функции? Или как ее правильно обозначить чтобы получать ее там где мне нужно?
Конечно данную конструкцию можно собрать на нужной странице, минуя файл js от icms но все таки нужно запустить функцию внутри файла js.

Спасибо.
Редактировалось: 1 раз (Последний: 20 октября 2016 в 12:58)
Дополнения для InstantCMS
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4462
Код JAVASCRIPT:
  1. var icms = icms || {};
  2.  
  3. icms.test = (function ($) {
  4.  
  5. this.add_name;
  6.  
  7. this.onDocumentReady = function(){
  8.  
  9. this.add_name = 'test';
  10.  
  11. }
  12.  
  13. this.new_func = function(){
  14.  
  15. alert(this.add_name); // test
  16.  
  17. func = function(){
  18. alert(icms.test.add_name); // test
  19. alert(this.add_name); // undefined
  20. }
  21.  
  22. func();
  23.  
  24. }
  25.  
  26. return this;
  27.  
  28. }).call(icms.test || {},jQuery);
область видимости
Редактировалось: 2 раз (Последний: 20 октября 2016 в 13:06)
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 394
Создать новый объект из данной функции конструктора и обращаться к его свойству.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1858
В данном случае fuse ответил верно и понятно. Спасибо.

Но тут возник другой вопрос, дело в асинхронности. Имеем следующее:
Код JAVASCRIPT:
  1. var icms = icms || {};
  2.  
  3. icms.test = (function ($) {
  4.  
  5. this.onDocumentReady = function(){
  6.  
  7.  
  8.  
  9. }
  10.  
  11. this.start = function() {
  12.  
  13. var arr = icms.get.getData();
  14.  
  15. alert(arr);
  16.  
  17. }
  18.  
  19. this.getData = function(){
  20.  
  21. $.post('/get/getdata', false, function(result){
  22.  
  23. if (!result.error){
  24. var data = result.data;
  25. return data;
  26. } else {
  27. return;
  28. }
  29.  
  30. }, "json");
  31.  
  32. }
  33.  
  34. return this;
  35.  
  36. }).call(icms.test || {},jQuery);
При вызове функции "start" присваиваем переменную "arr" которую получаем из функции "getData".
Но при такой последовательности, arr присваивается после того как будет выведена alert'ом.
При таком раскладе arr = undefined

Как быть?
Редактировалось: 1 раз (Последний: 20 октября 2016 в 16:31)
Дополнения для InstantCMS
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1858
Причем если функция getData будет такой:
Код JAVASCRIPT:
  1. this.getData = function(){
  2.  
  3. var data = '321';
  4.  
  5. return data;
  6.  
  7. }
То переменная arr норм присваивается.
Получается ответ $.post приходит после того как функция уже обработана, и ответа никто не ждет.
Редактировалось: 3 раз (Последний: 20 октября 2016 в 16:32)
Дополнения для InstantCMS
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4462
Джехутимери:
Создать новый объект из данной функции конструктора и обращаться к его свойству
Это не PHP
Kreator:
fuse ответил верно
Кто это? smile
Код JAVASCRIPT:
  1. var icms = icms || {};
  2.  
  3. icms.test = (function ($) {
  4.  
  5. this.data;
  6.  
  7. this.onDocumentReady = function(){
  8. this.start();
  9. }
  10.  
  11. this.start = function() {
  12.  
  13. this.loadData();
  14.  
  15. }
  16.  
  17. this.setData = function(data) {
  18.  
  19. this.data = data;
  20. console.log(data);
  21.  
  22. }
  23.  
  24. this.loadData = function(){
  25.  
  26. $.post('/get/getdata', false, function(result){
  27.  
  28. if (!result.error){
  29. icms.test.setData(result.data);
  30. } else {
  31. return;
  32. }
  33.  
  34. }, "json");
  35.  
  36. }
  37.  
  38. return this;
  39.  
  40. }).call(icms.test || {},jQuery);
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 122
Код JAVASCRIPT:
  1. var icms = icms || {};
  2.  
  3. icms.test = (function ($) {
  4.  
  5. this.onDocumentReady = function(){
  6. this.start();
  7. }
  8.  
  9. this.start = function() {
  10. this.getData(function(data) {
  11. alert(data);
  12. });
  13. }
  14.  
  15. this.getData = function(callback) {
  16. $.post('/get/getdata', false, function(result) {
  17. if (!result.error) {
  18. var data = result.data;
  19. callback(data);
  20. } else {
  21. return;
  22. }
  23. }, "json");
  24. }
  25.  
  26. return this;
  27.  
  28. }).call(icms.test || {}, jQuery);
Редактировалось: 4 раз (Последний: 22 октября 2016 в 16:48)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.