我在从操作中呈现.js.erb时遇到了问题。动作会触发,rails告诉我它正在呈现js.erb,但js从未呈现过,并且从js中的控制台日志中可以明显看出它没有呈现到浏览器的控制台。我在网上尝试了一堆解决方案,但似乎找不到为什么rails会告诉我这个js模板正在呈现,而不是让它真正在浏览器中呈现。我能错过什么呢?
控制器操作
def dynamic_search
puts "WE ARE IN DYNAMIC_SEARCH"
puts params[:q]
client = HTTPClient.new
string = 'call to google places api'
@result = client.get_content(string)
@hash = JSON.parse @result
render "home/dynamic_search.js.erb", format: :js
endRails终端输出
Rendering home/dynamic_search.js.erb
Rendered home/dynamic_search.js.erb (Duration: 0.0ms | Allocations: 4)
Completed 200 OK in 479ms (Views: 0.7ms | ActiveRecord: 0.0ms | Allocations: 4613)更新:
调用该操作的代码如下(不是100%正确,但目前只是使用JQuery easy-autocomplete测试调用)
document.addEventListener("turbolinks:load", function() {
$input = $('*[data-behavior="autocomplete"]')
var options = {
url: function(phrase){
console.log(phrase)
return '/search/' + phrase
}
}
$input.easyAutocomplete(options);
});发布于 2020-12-11 03:54:47
easy-autocomplete期望dynamic_search返回可解析的数据(JSON或XML)。
它实际上并没有在当前上下文中运行"dynamic_search.js.erb“中的js。这意味着要么"dynamic_search.js.erb“的内容需要在呈现之后表示这样的对象,要么最好是dynamic_search操作直接呈现它。
例如(我将假设您希望在@result中使用easy-autocomplete )
def dynamic_search
puts "WE ARE IN DYNAMIC_SEARCH"
puts params[:q]
client = HTTPClient.new
string = 'call to google places api'
@result = client.get_content(string)
render json: @result
end我不确定@result json实际上是什么样子,所以您可能需要在上面或下面进行额外的操作。
那么js可以是:
document.addEventListener("turbolinks:load", function() {
$input = $('*[data-behavior="autocomplete"]')
var options = {
url: function(phrase){
console.log(phrase)
return `/search/${phrase}`
}
}
$input.easyAutocomplete(options);
});https://stackoverflow.com/questions/65223464
复制相似问题