Автозаполнение 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, которые уже отрисованы перед динамическим добавлением.

Другие вопросы по тегам