Как установить глобальные переменные в Javascript / HTML5 в приложении магазина Windows8

#javascript #windows-store-apps #windows-store

#javascript #windows-8

Вопрос:

Я хочу использовать глобальную переменную в файлах .js. Например,

когда я читаю содержимое файла в » a.js a.html » и сохраняется в определенной переменной «fileContent»

тогда я также хочу использовать этот ‘fileContent’ в » b.js b.html «.

(кроме того, когда я изменяю ‘fileContent’ в «b.js b.html «, это должно повлиять на ‘fileContent’ в «a.js a.html «)

Что мне делать?

Спасибо.

Комментарии:

1. я не уверен насчет Windows 8 — но вы могли бы использовать что-то вроде localStorage или sessionStorage в javascript

Ответ №1:

Учитывая, что архитектура приложений Windows 8 представляет собой одностраничную модель, в которой вы не перемещаетесь по браузеру, а просто загружаете фрагмент HTML и вставляете его в текущий документ, это очень просто. Я бы, однако, рекомендовал использовать некоторую типизацию, а не просто «голую» глобальную переменную.

Файл A (globals.js ):

 WinJS.Namespace.define("MyGlobals",  {
    variableA: null,
});
  

Включите это в начало default.html после включения WinJS.

Файл B (b.js):

 // your other code
...
MyGlobals.variableA = getValueFromSomewhere();
  

Файл C (b.html , или c.js):

 // your other code
...
printSomethingAwesomeFromData(MyGlobals.variableA);
  

Комментарии:

1. У меня есть несколько вопросов. Мне действительно понравился этот код. Однако значение variableA нельзя использовать в c.js Моя цель — создать WinJS.binding.list(); переменная, которая может использоваться совместно как в b.js, так и в c.js Мой код похож на приведенный ниже:

2. [global.js ], который «включен» в default.html —> WinJS.Namespace.define(«MyGlobals», { varA:null, });

3. [b.js] MyGlobals.varA = new WinJS.binding.list(); и MyGlobal.varA.push({заголовок: varTitle, описание:varDesc});

4. [c.js] var theTitle=MyGlobal.varA.getAt(0).title;

5. здесь, когда я отлаживаю c.js, MyGlobal.varA кажется неопределенным. это означает, что эти переменные в b.js и c.js отличаются, даже если имя переменной MyGlobal.varA одно и то же. @Dominic-Hopton

Ответ №2:

Вы также можете использовать настройки приложения:

 var applicationData = Windows.Storage.ApplicationData.current;
var localSettings = applicationData.localSettings;
var composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1;
composite["strVal"] = "string";

localSettings.values["exampleCompositeSetting"] = composite;
  

Здесь вы можете найти дополнительную информацию: Ссылка

Комментарии:

1. localSettings ? Что это?

2. Я забыл добавить код. Теперь будет правильно. Посмотрите на ссылку, чтобы получить дополнительную информацию.

3. applicationData ? Я думаю, вы забыли var applicationData = Windows.Storage.ApplicationData.current;

Ответ №3:

Вы можете легко определить переменную и использовать ее как глобальную переменную, например

 WinJS.Namespace.define("MyGlobals", {i: 0,k:5    })
  

Для проверки вы можете добавить прослушиватель событий, например

 div1.addEventListener('click', divClickEvent);

function divClickEvent() {
        MyGlobals.i  ;
        MyGlobals.k  ;
        console.log("ValueOf_i____"   MyGlobals.i);
        console.log("ValueOf_k____"   MyGlobals.k);
    }
  

Ответ №4:

Используйте localStorage.
В:

 localStorage.setItem('fileContent', 'value;');
  

В B:

 var fileContent = localStorage.getItem('fileContent');
  

Или просто получить доступ к localStorage любому другому объекту:

 localStorage.fileContent = "value";
  

Однако имейте в виду, что localStorage преобразует все значения в строки, включая объекты и массив. Чтобы установить / получить их, вам нужно будет использовать JSON.stringify и JSON.parse соответственно:

 localStorage.setItem('fileContent', JSON.stringify([1,2,3,4,5,6,7]));
var fileContent = JSON.parse(localStorage.getItem('fileContent'));
  

Комментарии:

1. спасибо за решение! но есть ли какой-либо способ использовать определенную переменную? Я имею в виду переменную ‘fileContent’, которая определена в C.js и использует эту переменную в .js и b.js?

2. @klados: только если вы хотите использовать переменные на одной .html странице. В противном случае вам придется полагаться на localStorage файлы cookie или.