Автозаполнение Jquery в динамическом поле с использованием COCOON Rails 3
Привет, я использую кокон для создания вложенного поля.
COCOON: https://github.com/nathanvda/cocoon
Вложенная форма / поля работает на 100%, поэтому я попытался интегрировать автозаполнение jQuery в одно вложенное поле.
Я следил за этой суть (разветвленный от map7): https://gist.github.com/xirukitepe/5132317
Автозаполнение работает в первом / родительском поле, но не работает в других последующих вложенных полях.
Вот мой код:
Сначала я создал контроллер автозаполнения....
class AutocompleteController < ApplicationController
def categories
if params[:term]
like = "%".concat(params[:term].concat("%"))
categories = Category.where("lower (categories.code) LIKE lower(?)", like)
else
categories = Category.all
end
list = categories.map {|u| Hash[id: u.id, label: u.code, name: u.code]}
render json: list
end
end
Потом в item.rb
Я добавил attr_accessor и один метод...
attr_accessor :category_code
def category_code
category.code if category_id
end
В items_controller.rb
def category_code=(code)
category= Category.find_by_code(code)
if category
self.category_id = category.id
else
errors[:category_code] << "Invalid name entered"
end
end
def category_code
Category.find(category_id).name if category_id
end
Вот мой файл кофе:
$ ->
$('input.x').autocomplete
source: "/autocomplete/categories"
select: (event,ui) -> $("input.xx").val(ui.item.id)
routes.rb
match '/autocomplete/categories' => "autocomplete#categories"
resources :project_procurement_management_plans do
resources :attachments
resources :items do
member do
put :edit_pmr_item
get :edit_item
end
end
end
Я называю это через класс, а не ID, потому что вложенные атрибуты имеют разные IDS, и я не знаю, как вызвать его с помощью JS.
Любые обходные пути будут оценены. Благодарю.
1 ответ
Чтобы сделать это, вы должны зацепить обратные вызовы кокона.
Основываясь на моих объяснениях в примерах из README Cocoon:
$('#tasks')
.on('cocoon:after-insert', function(e, task_to_be_added) {
task_to_be_added.autocomplete({
source: "/autocomplete/tags"
});
})
Вам все еще нужно сделать что-то, как вы сделали, чтобы инициализировать itens, которые уже отрисованы перед динамическим добавлением.