2015-02-23 3 views
0

Я унаследовал некоторый код, который использует Play! который имеет файлы scala.html, в которых есть javascript. Играть! и scala - все новое для меня.Как преобразовать массив javascript в scala Список объектов

Одна из функций javascript делает сообщение и возвращает объект JSON. Затем он перебирает объект JSON и создает массив.

var myArray = []; 

function createArray(){ 
    $.post('/createArray', $('#arrayForm').serialize()).done(function(data) { 
     var obj1 = JSON.parse(data); 
     $.each(obj1, function(idx, obj) { 
      myArray.push(obj.name); 
     }); 
    }); 
    return true; 
} 

Он использует этот массив (строки), чтобы создать поле ввода текста, который делает автозаполнение с использованием данных в массиве.

Я хочу/должен преобразовать этот текст в раскрывающийся список, используя Play! @select, но опции arg для @select хотят, чтобы объект List (или Map или Seq - только фигурный список был бы проще, так как у меня уже есть массив строк).

Если я вручную создаю объект List, он отлично работает.

@select(pForm("equipName"), options(scala.collection.immutable.List("Yes","No"))) 

Проблема в том, что я не могу понять, как преобразовать MyArray массив в объект List, который можно затем перейти к опции @Select.

Я нашел много сообщений, которые говорят о преобразовании списка Scala в массив, но не могут найти способ пойти другим путем. Я надеюсь, что это просто, что я не могу понять.

Заранее благодарим за помощь.

ответ

1

Вы не можете этого сделать. А точнее - вы не хотите этого делать.

Итак, в основном ваше приложение для воспроизведения запускается на сервере. В приложении Play все эти .scala html-файлы скомпилированы для генерации некоторых функций.

Теперь, когда приложение воспроизведения получает запрос от клиентского браузера, оно получает сопоставление с каким-то контроллером маршрутизатором. Контроллер выполняет некоторую обработку и, наконец, выполняет одну из этих функций (скажем, для index.scala.html мы получаем views.html.index) и вызываем эту функцию с некоторыми параметрами.

Эти функции возвращают text, которые затем отправляются в браузер клиента в виде ответа HTTP с заголовком ответа Content-Type:text/html; charset=utf-8, который сообщает браузеру об этом тексте как html.

Теперь браузер отображает html с встроенным JavaScript и, следовательно, запускает JavaScript. Итак ... в основном ваш код JavaScrpt не существует на сервере ... для play все это всего лишь текст.

Оба эти Scala code и JavaScript code выполнены в разное время на разных компьютерах и в разных средах, поэтому вы не можете делать все, что вы говорите.

+0

Важная информация: https://stackoverflow.com/questions/17817174/play-framework-using-javascript-variable-in-scala-template –

+0

Спасибо @Sarvesh. Это объясняет, почему я не мог понять это. :-) Старался избегать создания функции на стороне сервера, поскольку она будет получать только те же данные. – mikenol

Смежные вопросы