jquery: предварительное заполнение полей автозаполнения - PullRequest
3 голосов
/ 26 марта 2010

Я использую плагин для автозаполнения токенов для 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, поэтому мне нужна помощь в манипулировании данными, как только они станут на стороне клиента.

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Неважно, я решил:

$(document).ready(function () {
  $(".tag_ids_field").each(function(index) {
    var ids = eval($(this).html());
    $(this).html('');

    $(this).tokenInput("/tags", {
      queryParam: "search",
      prePopulate: ids
    })
  });
});
1 голос
/ 26 марта 2010

Я бы подумал, что для контроллера было бы больше смысла предоставлять данные для представления редактирования и заполнять поля через ruby, устанавливая атрибут value для элементов ввода. Даже если вы изменяете форму редактирования, вы можете заставить контроллер передавать данные в представление. Если вы не делаете что-то, где данные не сохраняются в базе данных ...

Может быть, нужно еще кое-что понять, почему вы пытаетесь сделать это таким образом.

...