Javascript в Icms2

#1 20 октября 2016 в 12:49
Подскажите схему работы. Имеем js:
  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.

Спасибо.
#2 20 октября 2016 в 13:02
  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);
область видимости
#3 20 октября 2016 в 14:28
Создать новый объект из данной функции конструктора и обращаться к его свойству.
#4 20 октября 2016 в 16:23
В данном случае fuse ответил верно и понятно. Спасибо.

Но тут возник другой вопрос, дело в асинхронности. Имеем следующее:
  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

Как быть?
#5 20 октября 2016 в 16:26
Причем если функция getData будет такой:
  1. this.getData = function(){
  2.  
  3. var data = '321';
  4.  
  5. return data;
  6.  
  7. }
То переменная arr норм присваивается.
Получается ответ $.post приходит после того как функция уже обработана, и ответа никто не ждет.
#6 20 октября 2016 в 16:52

Создать новый объект из данной функции конструктора и обращаться к его свойству

Джехутимери
Это не PHP

fuse ответил верно

Kreator
Кто это? smile
  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);
#7 21 октября 2016 в 17:19
  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);
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.