Полный вопрос по настройке noob Jquery / Rails (возможно) - PullRequest
1 голос
/ 24 марта 2011

Предыстория: я делаю RoR уже около года, и довольно комфортно с ним, однако я почти ничего не знаю о Javascript.

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

Прямо по сигналу - старый добрый Райан Бейтс делает railscast .Поэтому я начинаю следовать инструкциям.

Немного нервничал, когда мне пришлось начать установку гема jquery-rails (я уже установил jrails, чтобы другие вещи работали).

Как и предполагалось, это сломало некоторые вещи, но мне удалось снова заставить это работать.

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

Однако, когда я начинаю печатать в текстовом поле - ничего не происходит, и когда я просматриваю окно консоли, оно возвращается с:

Uncaught TypeError: Cannot call method 'replace' of undefined
  jQuery.jQuery.extend._Deferred.deferred.resolveWith
  done
  jQuery.ajaxTransport.send.callback

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

(Я должен также добавить - я тоже использую formtastic)

Заранее спасибо.

1 Ответ

0 голосов
/ 11 мая 2012

Хорошо, наконец-то разобрался.

Получается, что столбец имени моего автора не name, а author. Поэтому мне нужно было внести изменения в сценарий js.coffee, чтобы переопределить поиск по умолчанию name.

Строка, которую вам нужно использовать:

propertyToSearch: "author"

Весь мой файл book.js.coffee теперь выглядит так:

jQuery ->
  $('#book_author_tokens').tokenInput '/authors.json'
    theme: 'mac'
    prePopulate: $('#book_author_tokens').data('load')
    propertyToSearch: "author"

Это фактически исправило ошибку Uncaught TypeError: Cannot call method 'replace' of undefined

Конечно, если вы используете другое имя столбца, вам также нужно отредактировать функции в файле author.rb, чтобы отразить это:

def self.tokens(query)
      authors = where("author like ?", "%#{query}%")
      if authors.empty?
        [{id: "<<<#{query}>>>", author: "New: \"#{query}\""}]
      else
        authors
      end
    end

    def self.ids_from_tokens(tokens)
      tokens.gsub!(/<<<(.+?)>>>/) { create!(author: $1).id }
      tokens.split(',')
    end

Редактировать

Еще одна вещь, которую я должен был сделать для полей, которые должны быть предварительно заполнены существующими авторами, была изменить это:

= f.input :author_tokens, :data => { :load => @book.author }

На это:

= f.input :author_tokens, :input_html => { :data => { :load => @book.author } }

И тогда они появятся.

Надеюсь, это поможет вам.

...