Я использую плагин для автозаполнения токенов для jquery (http://loopj.com/2009/04/25/jquery-plugin-tokenizing-autocomplete-text-entry). Я в основном использую Ruby, и я действительно незнаком с javascript, хотя.
Моя базовая настройка выглядит следующим образом и отлично работает для новой пустой формы:
$(document).ready(function () {
$("#tag_ids_field").tokenInput("/tags", {
queryParam: "search"
});
});
Проблема возникает, когда я пытаюсь заполнить ее, например, для страницы редактирования. Я пытаюсь сделать что-то вроде этого (где текстовое поле "#tag_ids_field" содержит JSON, когда страница загружена - этот способ более понятен на стороне приложения).
$(document).ready(function () {
var tags = $("#tag_ids_field").html();
$("#tag_ids_field").tokenInput("/tags", {
queryParam: "search",
prePopulate: tags
});
});
Однако, когда страница загружается, я вижу, что она просто заполнена сотнями записей, которые читаются как «неопределенные». Я получаю это, даже если я беру вывод JSON, который предоставляет Rails, и пытаюсь вставить его прямо в файл .js:
$(document).ready(function () {
$("#tag_ids_field").tokenInput("/tags", {
queryParam: "search",
prePopulate: "[{\"id\":\"44\",\"name\":\"omnis sit impedit et numquam voluptas enim\"},{\"id\":\"515\",\"name\":\"deserunt odit id doloremque reiciendis aliquid qui vel\"},{\"id\":\"943\",\"name\":\"exercitationem numquam possimus quasi iste nisi illum\"}]"
});
});
Это, очевидно, не решение, я просто попробовал его из-за разочарования, и у меня такое же поведение.
Мои два вопроса:
Во-первых, почему мои текстовые поля заполняются "неопределенными" тегами, когда я пытаюсь предварительно заполнить, и как я могу заставить их успешно заполняться?
Во-вторых, я планирую иметь много полей автозаполнения, подобных этому, на одной странице (поскольку, когда несколько записей редактируются одновременно - все они запрашивают одно и то же место). Как сделать так, чтобы каждое поле автозаполнения брало предварительно заполненные значения из своего собственного текстового поля? Что-то вроде (применение этих настроек ко всем полям ввода с определенным классом, а не только с определенным идентификатором):
$(document).ready(function () {
$(".tag_ids_field").tokenInput("/tags", {
queryParam: "search",
prePopulate: (the contents of that particular ".tag_ids_field" input box)
});
});
Flash84x: Я не уверен, к чему ты клонишь. Поле tag_ids_field не является полем базы данных - это виртуальный атрибут, который я определил в модели. Сеттер (который принимает список идентификаторов, разделенных запятыми) определяет отношение записи к этим тегам в базе данных. Метод получения (который заполняет текстовую область при загрузке страницы) может возвращать все, что я хочу, - прямо сейчас у меня настроено просто возвращать текущие данные тега в JSON, потому что все так аккуратно.
Я могу объяснить это более подробно, если хотите, но с Ruby все хорошо, и мне это удобно. Я просто совсем не знаю javascript, поэтому мне нужна помощь в манипулировании данными, как только они станут на стороне клиента.