完成noob Jquery / Rails设置问题(可能)

时间:2011-03-24 16:28:27

标签: ruby-on-rails-3 jquery-plugins tokenize formtastic

背景:我现在已经做了大约一年的RoR,并且对它很熟悉,但是,我对Javascript几乎一无所知。

我一直在玩我的rails应用程序中的一些jquery自动填充功能。我几乎有一个版本正在运行,但是对于一对多的关系也需要一些标记化的字段。

正确的提示 - 好老Ryan Bates在上面railscast。所以我开始按照说明进行操作。

当我不得不开始安装'jquery-rails'宝石时,我有点紧张(我已经安装了jrails来让其他东西工作)。

如所怀疑的那样,它破坏了一些东西,但我设法让它再次起作用。

无论如何,我完成了教程的大部分内容,一切都很顺利 - 我已经有了tokenizer脚本来找到正确的输入字段,并且它按预期运行。我也测试了json链接 - 它发送回所有正确的东西。

然而,当我开始输入文本字段时 - 没有任何反应,当我查看控制台窗口时,它会返回:

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

我可以猜测为什么会出错 - 但任何专家建议都会受到高度赞赏。

(我还应该补充 - 我也使用了formtastic)

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的,终于明白了。

事实证明,我的作者姓名列不是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 } }

然后他们会出现。

希望这会对你有所帮助。