2011-03-24 37 views
1

背景:我一直在做的回報率大約一年,現在,我與它相當舒適的,但我知道旁邊沒有關於JavaScript。完全小白的Jquery/Rails的設置問題(可能)

我一直在玩弄我的Rails應用程序的一些jQuery的自動完成的東西。我幾乎有一個版本的工作,但也需要一些標記化的領域一對多的關係。

果然不出所料 - 好老賴安·貝茨做就可以了railscast。所以我開始遵循指示。

得到了一個有點緊張,當我不得不開始安裝「jQuery的軌道」寶石(我已經安裝了jrails得到其他的東西的工作)。

懷疑,它打破了一些東西,但我設法讓那個工作再次。

無論如何,我得到了大部分的方式,通過本教程,一切都進行得很順利 - 我有標記生成器腳本找到正確的輸入字段,並如預期的行爲。我也測試了json鏈接 - 發回所有正確的東西。

然而,當我在文本字段開始打字 - 沒有任何反應,當我查看控制檯窗口,它回來了:

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

我可以猜測,爲什麼這是怎麼了 - 但任何專家的意見將不勝感激。

(我還要補充 - 我使用formtastic太)

在此先感謝。

+0

我知道這沒有什麼幫助,但是想在這裏添加我的聲音,希望能夠獲得一些點擊。我只有在使用simple_form時纔會遇到同樣的錯誤。不知道問題可能是什麼。幫助表示讚賞。 – kakubei 2012-05-11 08:09:51

回答

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 

編輯

另一件事我曾經爲fieldsto與現有的作者預先填充要做的就是改變這種:

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

要這樣:

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

而且那麼他們會出現。

希望這可以幫助你。