在Sinatra(ruby)中实现JS模糊搜索

Implementing JS fuzzy search in Sinatra (ruby)

本文关键字:实现 JS 模糊搜索 Sinatra ruby      更新时间:2023-09-26

我正在尝试使用fuse.js在Sinatra项目中进行模糊搜索,但我对JavaScript实现有点迷茫。

我用JSON格式的所有数据创建了route

# encoding: utf-8
class Lambree < Sinatra::Base
  get "/json/all" do
    content_type :json
    @pre = Prescriptions.all
    @pre.to_json
  end
end

然后我加载了fuse.js并在layout.haml中添加了一个函数:

:javascript
  $(function() {
    $( "#fuse" ).search( {
      onSelect: function(text) {
          var data = $.getJSON("/json/all")
          var f = new Fuse(data);
          var result = f.search('Falen');
        }
      }
    );
  });

%label{:for => "search"} Ψάξε:
%input#search/
%button#but{:onclick => "search()"} Search

这当然是行不通的。

我需要了解如何调用 JS 函数,因为我错过了很多,但无法确切地说出从哪里开始!任何带有一些代码和分步说明的示例都将非常受欢迎!

谢谢

现在回答真正的问题。您需要将搜索文本传递给您的 ruby 代码。

$("#fuse").search({
  onSelect: function(text) {
    var data = $.getJSON("/json/all", {text: text})
    var f = new Fuse(data);
    var result = f.search('Falen');
  }
});

之后,在您的方法中获取它(我不记得如何使用sinatra,抱歉,以下代码可能会也可能不会按原样工作)。

get "/json/all" do
  content_type :json
  text = params[:text]
  pre = Prescriptions.find(name: text)
  pre.to_json
end

你很好去。