2015-05-22 4 views
0

проблемы с небольшим javascript. Pixate - это инструмент проектирования пользовательского интерфейса, который позволяет создавать пользовательские действия в JS. Я пытаюсь создать небольшое JS-действие с несколькими строками кода, но, очевидно, я наблюдаю за чем-то очевидным (извините, я не настоящий кодер). Вот мой сценарий до сих пор:Pirate - напишите назад массив javascript

var layers = getSelectedLayers(); 
var erg = ""; 

for (var elem in layers) { 
    erg += layers[elem] + ", "; 
} 

alert(erg); 

var group = createLayer("MyGroup"); 
group.y = group.x = 0; 
group.width = Screen.width;; 
group.height = Screen.height;; 
group.backgroundColor = 'transparent'; 

nestLayers(group, erg); 

команды "getSelectedLayers" "createLayers" ANS "nestLayers" предлагаются Pixate. Если я пытаюсь запустить свой код, кажется, что «getSelectedLayers» работает (функция предупреждения возвращает массив выбранных слоев). Также создается новый слой. Проблема заключается в том, что после запуска функции «nestLayers» после вложенности первого выбранного слоя сценарий останавливается с ошибкой на моей последней строке «undefined is not a function» ...

Любая помощь с благодарностью - Спасибо !

+0

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

+2

Так это «Pixate» или «Pirate»? – Pavlo

+0

['nestLayers'] (http://www.pixate.com/docs/actions/#nestlayer) принимает параметр Layer как параметр, вы уверены в параметре' erg'? – Hacketo

ответ

0

Существует два вопроса с вашим вызовом nestLayers: он ожидает, что все слои будут в качестве параметров (а не массивом), и вы передали массив строк, а не объекты слоя (см. Документы здесь: http://www.pixate.com/docs/actions/#nestlayer).

Правильное действие должно выглядеть следующим образом:

var layers = getSelectedLayers(); 

var group = createLayer("MyGroup"); 
group.y = group.x = 0; 
group.width = Screen.width; 
group.height = Screen.height; 
group.backgroundColor = 'transparent'; 

nestLayers.apply(this, [].concat(group, layers)); 

apply вызывает функцию с помощью прилагаемого массива в качестве параметров (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply), и я просто конкатенации слой группы, а остальные слои в одиночный массив.

+0

- спасибо, помощник! Ваше решение работает хорошо. Единственная проблема заключается в том, что он обрабатывает только «не вложенные» слои. Если выбранные вами слои не вложены, он работает хорошо. Если вы выберете «сгруппированные» слои, это приведет к сбою приложения. Но я боюсь, что проверка/соблюдение иерархии слоев будет слишком сложной - не так ли? –