#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 или.