2016-03-23 3 views
0

У меня есть файл api-файла javascript, который возвращает массив. Это важно знать, что это JS используется в другой HTML, поэтому я не могу поставить код на HTML что-то вроде этого (myfile.js):Использовать массив объекта из javascript use-api в javascript с визитной карточкой

"use strict"; 

var global = this; 

use(function() { 
    var myArray = []; 
    //something to fill the array with custom objects and inner arrays 
    return myArray; 
}); 

Тогда в моем HTML я имею некоторый код но самое главное, что мне нужно использовать этот массив в javascript, но я не могу понять, как это сделать, потому что если я использую context='scriptString' или context='scriptToken', он не работает, и я не могу использовать массив.

Это код:

<div data-sly-use.test="myfile.js"> 
    <!-- some html irrelevant code --> 

    <script type='text/javascript'> 
     //this returns a flat string representation of the first level of the array 
     var a = '${test @context='scriptString'}'; 
     //this give an error in the code 
     var b = ${test @context='scriptString'}; 
     //this returns empty 
     var c = '${test @context='scriptToken'}'; 
    </script> 
</div> 

Есть ли способ, чтобы использовать этот массив (без изменения myfile.js файла)

+0

'test' есть на этот вопрос только .. в моем коде у меня есть другое имя.но я не думаю, что это будет исправлять .. в любом случае я попробую. –

+0

Я понял, что это не исправит, поэтому я удалил комментарий. – jmugz3

+0

Возможно, попробуйте использовать двойные кавычки ... $ $ {test @ context = 'scriptString'} " – jmugz3

ответ

0

Я предлагаю, если вы хотите поместить переменные в массив вы просто использовать следующее (и придерживаться чисто javascript:

<div data-sly-use.test="myfile.js"> 

    <script type='text/javascript'>  

    var a = myArray[n]; 

    </script> 

</div> 

Где n равно номеру объекта в arra y, что вы хотите вернуть значение.

Таким образом, вам не нужно редактировать файл javascript, и это делает все намного проще!

+0

Я уточнил, что я не могу поместить код javascript внутри html, этот js используется другим html (компонентами). –

+0

@Phoenix_uy Хорошо, я отредактировал свой ответ. Кроме того, он не должен мешать никакому другому javascript, если вы не используете одни и те же переменные в другом месте. –

+0

То, что вы ставите, не имеет никакого отношения к моему вопросу ... Я пытаюсь «извлечь» массив, который возвращает 'myfile.js', используя' use-api'. Я знаю, как помещать переменные в массив, но это не проблема –

0

Я только что проверил себя, и все прошло отлично. Вот что я сделал.
Просто к сведению, что это на AEM 6.1 (без SP1)

test.html:

<div data-sly-use.test="test.js"> 
    <script type="text/javascript"> 
     var test = [${test @context="scriptString"}];  
    </script> 
    This is a TEST! 
</div> 
<div class="clearfix"></div> 

test.js:

"use strict"; 

use(["/libs/wcm/foundation/components/utils/AuthoringUtils.js"], function (AuthoringUtils) { 

    return [0,1,2,3,4,5]; 

}); 

и это результирующий HTML

<div class="test">  
<div> 
    <script type="text/javascript"> 
     var test = [0,1,2,3,4,5];  
    </script> 
    This is a TEST! 
</div> 
<div class="clearfix"></div> 
</div> 
+0

Будьте осторожны, но после более глубокого тестирования вы не можете вернуть массив сложных объектов, я просто попробовал, он поместит все значения в один массив. Кроме того, я не думаю, что неплохо вернуть массив в api-use, лучше вернуть объект, который вы добавили бы ваши значения в свойствах. Таким образом, если у вас есть компоненты, которые используют один и тот же скрипт, вы можете добавить новое свойство, специфичное для компонента. Здесь я бы предложил иметь «object.json», который вы могли бы повторно воспроизвести в своем главном скрипте. –

0

Похоже, что у вас есть объект JS, массив в этом случае, который вы хотите использовать как на стороне сервера, так и на стороне клиента. Вы создаете его на стороне сервера, используя Use-API, и используете его, но вам нужно в виде визитных шаблонов, затем вы пытаетесь добавить тот же объект к тегу <script>, чтобы клиент мог его также использовать. Это верно? Если да, то попробуйте одну из них, если вы еще не

<div data-sly-use.test="myfile.js"> 
<!-- some html irrelevant code --> 

<script type='text/javascript'> 
    //scriptToken context, no quotation marks 
    var b = ${test @context='scriptString'}; 
    //unsafe context, hope you trust the source of this object! 
    var c = ${test @context='unsafe'}; 
</script> 
</div> 

Hoever, если вам не нужен объект JS на стороне сервера, то нет никакой необходимости ВЗ использовать потребительных API. Просто создайте отдельный заметный файл, который добавит javascript на страницу и включит его в видимые файлы, которые в нем нуждаются.

/apps/path/to/shared/myfile.html

<script type="text/javascript"> 
    var global = this; 

    var myArray = []; 
    //something to fill the array with custom objects and inner arrays 
    //etc. 
</script> 

Затем шаблоны, которые нуждаются в том, что JS просто включить его

<div> 
    <!-- some html irrelevant code --> 
    <sly data-sly-include="path/to/shared/myfile.html"></sly> 
</div>