2015-12-06 51 views
1

我試圖在JQuery UI中使用自動完成功能。後端似乎正在工作。它打印出正確的對象並返回正確的json對象,但_render函數不會觸發。Jquery-UI的_render函數在自動完成功能中不起作用

的Javascript:

var app = window.app = {}; 
app.Problems = function() { 
    this._input = $('#problems-search-txt'); 
    this._initAutocomplete(); 
}; 

app.Problems.prototype = { 
    _initAutocomplete: function() { 
    this._input 
     .autocomplete({ 
     source: '/search_for_problems', 
     appendTo: '#problems-search-results', 
     select: $.proxy(this._select, this) 
     }) 
     .autocomplete('instance')._renderItem = $.proxy(this._render, this); 
    }, 

    _render: function(ul, item) { 
    var markup = ['<span class="name">' + item.name + '</span>']; 
    console.log("trying to render"); 
    return $('<li>').append(markup.join('')).appendTo(ul); 
    }, 

    _select: function(e, ui) { 
    this._input.val(ui.item.name); 
    return false; 
    } 
}; 

HTML:

<div class="problems-search"> 
    <input type="text" id="problems-search-txt" autofocus> 
    <div class="results" id="problems-search-results"></div> 
    </div> 

    <script> 
    new app.Problems; 
    </script> 

Ruby on Rails的

類ProblemsController < ApplicationController的

def search_for_problems 
    @problems = Problem.search(params[:term]) 

    logger.debug "there are #{@problems.count} problems with the term" 
    @problems.each do |problem| 
     logger.debug problem.name 
    end 
     respond_to do |format| 
     format.html 
     format.json { @problems = Problem.search(params[:term]) } 
     end 
    end 
end 

Jbuild呃:

json.array!(@problems) do |problem| 
    json.name problem.name 
end 

爲什麼_render函數不工作?

回答

0

我試過你的代碼,它工作正常。 請記住,_renderItem方法只會在嘗試鍵入輸入內容時觸發,並且會在值列表中找到適當的值(或值)。換句話說,只有在控件顯示源值的下拉列表時,纔會調用_render方法。

+0

仍然不適用於我 – user2871354

0

我有同樣的問題,因爲你,完全相同的代碼(可能是我們發現了同樣的教程... ...)

我不得不行改變

.autocomplete('instance')._renderItem = $.proxy(this._render, this); 

.autocomplete().data("ui-Autocomplete")._renderItem = $.proxy(this._render, this); 

它應該工作,如果您使用最新版本的jQuery UI(1.10+)

相關問題