Jquery + Rails 3 + плагин TokenInput + PrePopulate

Я использую плагин tokeninput (http://loopj.com/jquery-tokeninput/demo.html) для автозаполнения нескольких тегов, и он отлично работает в форме New.

Теперь я хочу предварительно заполнить то же самое в форме редактирования; Вот тут у меня трудности. Я создал один файл, который возвращает значения в формате json (идентификатор и имя). И если я скопирую эти результаты из журнала сервера и поставлю их в опцию prePopulate плагина tokeninput, все будет работать нормально.

Но когда мне это нравится

prePopulate: k.getJSON("tag_list_pre")

где tag_list_pre — это действие, которое возвращает выбранные теги в формате json. Если я предупрежу

alert(getJSON("tag_list_pre"));

он возвращает [object Object] и ничего предварительно не заполняет.

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

Аналогичная проблема задана в этом вопросе, но еще не ответила https://stackoverflow.com/q/5892326/489018

ОБНОВЛЕНИЕ: теперь я использую тот же метод, что и в http://railscasts.com/episodes/258-token-fields?view=asciicast Я использую data-pre для и получаю идентификатор формата json и строку имени, как того требует токен-ввод.

Пример вывода этим

[{"id":"5","name":"payment-processing"},{"id":"8","name":"asd"},{"id":"15","name":"java"}]

Теперь мой текстовый тег HTML выглядит примерно так.

<%= text_field_tag :project_tags, "data-pre" => @list1.to_json %>

где list1 — это массив в формате id и name, пример вывода @list1 выглядит следующим образом.

[{:id=>"5", :name=>"payment-processing"}, {:id=>"8", :name=>"asd"}, {:id=>"15", :name=>"java"}] 

и новый tokenInput выглядит так:

  k("#project_tags").tokenInput("tag_list", {
  prePopulate: k("#project_tags", k(this)).data("pre"),
  hintText: "Enter Tags for your Project",
  noResultsText: "No Such Tags",
  searchingText: "Looking for your Tags",
  preventDuplicates: true,
  theme: "facebook"
 });

Теперь моя проблема в том, что он ничего не заполняет заранее. Все остальное работает нормально.

Спасибо. Дайте мне знать, если вам нужна дополнительная информация.


person Kashyap    schedule 28.12.2011    source источник
comment
Взгляните на мой ответ на аналогичный вопрос, особенно в нижней части с рецептом, как использовать токены-вводы с JQuery в Rails3-   -  person mliebelt    schedule 28.12.2011
comment
Привет @milebelt Спасибо за ваш ответ, но я тоже пробовал, и я не мог понять, почему это не сработало. Так что я попробовал этот вариант. Так как этот вариант делает то же самое. Возвращает файл JSON. Моя форма редактирования очень сложная, она приносит данные из 6-8 разных моделей. Также я не уверен, как использовать .map(&:attributes).to_json. Если бы вы могли предоставить более подробную информацию о функции .map, было бы здорово. Спасибо.   -  person Kashyap    schedule 29.12.2011
comment
@mliebelt Я добавил код, который вы упомянули в другом вопросе, и я напечатал его ниже, и я получаю следующий результат. [{created_at:2011-12-28T12:26:30+05:30,id:10,project_master_id:7,tag_master_id:5,updated_at:2011-12-28T12:26:30+05:30},{created_at: 2011-12-28T12:26:30+05:30,id:11,project_master_id:7,tag_master_id:8,updated_at:2011-12-28T12:26:30+05:30}] Хотя желаемый формат json [ {id:5,имя:обработка платежей},{id:8,имя:asd}]   -  person Kashyap    schedule 29.12.2011
comment
Часть контроллера делает следующее: собирает для каждого элемента @testers его атрибуты в виде карты, возвращает коллекцию всех карт. Вы должны заменить его своим конкретным кодом, особенно там, где name. Что-то вроде: @testers.map {|t| { m = Map.new; m[:id] => t.id; m[:name] => t.name; m } где name — это метод, возвращающий имя тестера.   -  person mliebelt    schedule 29.12.2011
comment
@mliebelt Эй, я последовал вашим инструкциям и изменил текстовое поле, включив в него data-pre ‹%= text_field_tag ​​:project_tags, data-pre =› list1.to_json %›, где list1 — это массив, содержащий идентификатор и имя. Но даже после этого ничего не заполняется заранее . пожалуйста, направьте меня.   -  person Kashyap    schedule 30.12.2011
comment
Добавили ли вы необходимый код JavaScript в свое приложение, чтобы предварительное заполнение могло работать? Посмотрите еще раз на Railscasts.   -  person mliebelt    schedule 30.12.2011
comment
@mliebelt, kashyap - могу я попросить вас посетить stackoverflow.com/questions/9141176/? просто ожидаю, что вы внесете свой вклад в вопрос о вводе токена. я не знаю, приемлем ли такой запрос в SOF   -  person Istiaque Ahmed    schedule 05.02.2012


Ответы (1)


Уже поздно, но я столкнулся с точной проблемой. Ошибка заключается в вызове text_field_tag.

text_field_tag(name, value = nil, options = {})

Как видите, второй параметр — это значение параметра text_field, а третий — параметра options. Вам нужно передать nil как value, чтобы data-pre передавалось как option.

<%= text_field_tag :project_tags, nil, "data-pre" => @list1.to_json %>

Если вы не передадите ни одного value, он примет data-pre в качестве значения для text_field

person itziki    schedule 15.07.2014