2014-01-23 2 views
1

Я пытаюсь найти способ найти и проанализировать весь файл JSON из каталога, в рамках проекта Intel Xdk. Все файлы в моем случае хранятся в папке «/ cards» проекта. Я попытался связаться с темой с помощью метода fs.readdirSync ('/ cards'), но это не было указано на то место, что я ожидал, и мне не повезло с пути «intel.xdk.webRoot».просмотр каталога XDK для Intel

С помощью тренажера мне удалось получить файлы, с трюком:

fs.readdirSync(intel.xdk.webRoot.replace('localhost:53862/http-services/emulator-webserver/ripple/userapp/', '')+'cards');

(intel.xdk.webRoot содержит абсолютный путь к папке моего '/ карты')

и его работа как шарм, но он не работает в каком-либо реальном устройстве, что я хотел бы его построить. Я пробовал его с телефонами iOS7 и Android 4.2.

Пожалуйста, помогите мне отличным способом использовать метод fs.readdirSync() или дать мне альтернативное решение.

Спасибо и уважением,

сатира

ответ

1

Вы не можете использовать nodejs API, в мобильных приложениях. Это ошибка, из-за которой XDK-эмулятор позволяет вам это делать. Исправлена ​​ошибка в следующей версии XDK.

Вы можете написать программу узлов, которая сканирует каталог, а затем выписывает файл js с содержимым каталога. Перед тем, как упаковать приложение на вкладке сборки, вы запустите сценарий узла на своем ноутбуке. Вывод будет выглядеть следующим образом: files.js:

DIR = {файлы: [ 'FILE1.TXT', 'file2.txt']}

Затем используйте тег сценария, чтобы загрузить его:

И ваш js может читать переменную dir. Это предполагает, что содержимое не изменяется во время работы приложения.

1

Местоположение корневого каталога вашего приложения будет меняться в зависимости от целевой платформы и может также варьироваться в зависимости от эмулятора и контейнеров отладки (например, App Preview и App Analyzer). Вот что я сделал, чтобы найти файлы в рамках проекта:

// getWebPath() returns the location of index.html 
// getWebRoot() returns URI pointing to index.html 

function getWebPath() { 
    "use strict" ; 
    var path = window.location.pathname ; 
    path = path.substring(0, path.lastIndexOf('/')) ; 
    return 'file://' + path ; 
} 

function getWebRoot() { 
    "use strict" ; 
    var path = window.location.href ; 
    path = path.substring(0, path.lastIndexOf('/')) ; 
    return path ; 
} 

Я не был в состоянии проверить это исчерпывающе, но это, кажется, работает до сих пор. Вот пример, когда я использую медиа-объект Cordova и хочу, чтобы он воспроизводил файл, хранящийся локально в проекте. Обратите внимание, что у меня есть на «особый случай» КСН контейнер:

var x = window.device && window.device.platform ; 
console.log("platform = ", x) ; 

if(x.match(/(ios)|(iphone)|(ipod)|(ipad)/ig)) { 
    var media = new Media("audio/bark.wav", mediaSuccess, mediaError, mediaStatus) ; 
} 
else { 
    var media = new Media(getWebRoot() + "/audio/bark.wav", mediaSuccess, mediaError, mediaStatus) ; 
} 

console.log("media.src = ", media.src) ; 
media.play() ; 

Не совсем уверен, если это то, что вы ищете ...

+0

Спасибо, что помогли мне получить правильный путь. Но проблема в том, что я не знаю имена файлов, и я хотел бы перебирать каталог и загружать все из них.Поскольку я обнаруживаю его невозможное с клиентскими сценариями. – satire

+0

Для этого вам может понадобиться файл [Cordova fileapi] (http://cordova.apache.org/docs/en/2.9.0/cordova_file_file.md.html#File). На дату этой ноты XDK поддерживает Cordova 2.9.0, а также XDK api. – xmnboy

0

Вам нужно будет использовать Кордова построить в Intel XDK , здесь представлена ​​информация о строительстве с Кордова:

https://software.intel.com/en-us/html5/articles/using-the-cordova-for-android-ios-etc-build-option 

И DirectoryReader пример:

function success(entries) { 
    var i; 
    for (i=0; i<entries.length; i++) { 
     console.log(entries[i].name); 
    } 
} 

function fail(error) { 
    alert("Failed to list directory contents: " + error.code); 
} 

// Get a directory reader 
var directoryReader = dirEntry.createReader(); 

// Get a list of all the entries in the directory 
directoryReader.readEntries(success,fail);