Я хочу поместить переменную, полученную с помощью встроенного скрипта, в файл: index.ejs. Это код, который у меня есть:

$(function(){ 

 var finalpoints = points;
 var finalcosts = costammount;
 finaldata = [finalpoints,finalcosts];
});

И код, который у меня есть во внешнем файле:

(function( detail, $, undefined, index) {
    'use strict';
    var fd= finaldata;
})(fd, jQuery);

И ничего не происходит .. происходит ошибка:

ReferenceError: fd is not defined
at /app/index.js:95:4
    at Layer.handle [as handle_request] (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/layer.js:95:5)
    at next (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/layer.js:95:5)
    at /rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/index.js:335:12)
    at next (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/index.js:275:10)
    at serveStatic (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/serve-static/1.14.1/node_modules/serve-static/index.js:75:16)
    at Layer.handle [as handle_request] (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/layer.js:95:5)
0
jay 4 Окт 2020 в 19:45

1 ответ

Лучший ответ

Вы можете попробовать использовать глобальную переменную, т.е. объявить ее перед закрытием в глобальной области видимости. Это не «чистое» решение, но его проще всего попробовать и посмотреть, работает ли остальная часть кода.

var globalData = {
  finalpoints: 0,
  finalcosts: 0
};

$(function(){ 
 globalData.finalpoints = points;
 globalData.finalcosts = costammount;
});

А потом:

(function( detail, $, undefined, index) {
    'use strict';
    var fd= globalData;
})(fd, jQuery);

Вы также можете объявить некоторую глобальную функцию и вызвать ее из внешних файлов вместо прямого доступа к переменным, чтобы получить нужные вам значения. Таким образом, вы можете вернуть объект с данными и при необходимости добавить / удалить дополнительные данные.

function getFinalData() {
  return [globalData.finalpoints, globalData.finalcosts];
}

Или просто не переносите встроенные данные и не используйте глобальную переменную:

function getFinalData() {
  var finalpoints = points;
  var finalcosts = costammount;
  return [finalpoints, finalcosts];
}

А потом:

(function( detail, $, undefined, index) {
    'use strict';
    var fd= getFinalData();
})(fd, jQuery);

После этого вы можете попробовать некоторые решения для передачи сообщений, такие как настраиваемые события (https : //developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events), или какая-нибудь библиотека глобального хранилища данных, или даже https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage (или sessionStorage) и т. д. в зависимости от того, в какой области запущен внешний файл и / или как часто данные должны передаваться.

Имейте в виду, что встроенный код должен запускаться перед кодом из внешнего файла, то есть встроить его перед включением других скриптов.

0
ahwayakchih 4 Окт 2020 в 17:13