0

因此,假設我有一個Web應用程序,只是讓用戶保存他們的愛好。所以我有一種這樣的:jQuery自動完成與遠程JSON來源+谷歌應用程序引擎+ Python

class Hobby(ndb.Model): 
    hobby_name = ndb.StringProperty() 

用戶只需創建一個使用這種形式的業餘愛好實體:

<form action="/new-hobby" method="post"> 
    <input type="text" name="hobby_name" id="new-hobby" /> 
    <input type="submit" value="Save New Hobby" /> 
</form> 

那麼這個形式由該處理:

# Handles /new-hobby 
class NewHobby(webapp2.RequestHandler): 

    def post(self): 
     hobby_name = self.request.get('hobby_name') 
     if hobby_name: 
      h = Hobby(hobby_name = hobby) 
      h.put() 

app = webapp2.WSGIApplication([ 
    ('/new-hobby/?', NewHobby) 
], debug=True) 

這是標準的東西。通過這種設置,用戶可以通過多種方式進入相同的愛好(例如:「籃球」可以進入「籃球」)。這是通過增加所有用戶的「統一」輸入來實現自動完成功能的有用之處。

所以我決定用jQuery的多選遠程自動完成構件(http://jqueryui.com/autocomplete/#multiple-remote):

<script> 
    $(function() { 
    function split(val) { 
     return val.split(/,\s*/); 
    } 
    function extractLast(term) { 
     return split(term).pop(); 
    } 

    $("#birds") 
     .bind("keydown", function(event) { 
     if (event.keyCode === $.ui.keyCode.TAB && 
      $(this).autocomplete("instance").menu.active) { 
      event.preventDefault(); 
     } 
     }) 
     .autocomplete({ 
     source: function(request, response) { 
      $.getJSON("search.php", { 
      term: extractLast(request.term) 
      }, response); 
     }, 
     search: function() { 
      var term = extractLast(this.value); 
      if (term.length < 2) { 
      return false; 
      } 
     }, 
     focus: function() { 
      return false; 
     }, 
     select: function(event, ui) { 
      var terms = split(this.value); 
      terms.pop(); 
      // add the selected item 
      terms.push(ui.item.value); 
      terms.push(""); 
      this.value = terms.join(", "); 
      return false; 
     } 
     }); 
    }); 
    </script> 

遠程源上面的代碼中所指定的行$.getJSON("search.php",...);

因此,假設我在正確的軌道上,問題是:我應該用什麼文件替換search.php,以及該文件應該包含哪些內容?

回答

1

search.php需要用suggetsHobbies.php 之類的東西替換該文件應該返回自動完成工具可以用來建立興趣愛好列表的興趣愛好列表。它給出了一個參數term,其中包含用戶迄今鍵入的內容。用它來限制返回的列表。 F.ex.如果term是「ba」,則返回以「ba」開頭的業餘愛好列表。

+0

謝謝你的答案泰耶。在進一步的研究中,我意識到'suggestHobbies.php'應該包含一個「like」查詢。你知道使用Python,NDB查詢和GAE可能看起來像什麼嗎? – puoyaahhh 2014-10-13 17:32:55

1

我想你應該看看Django包的這種行爲類型。

This page來自djangopackages.com引用了幾個軟件包,它們的功能完全符合您的需求,併爲Django編寫。我建議你看看django-autocomplete-light(doc很棒),或者django-selectable,這更類似於你的問題的方法。

+0

感謝您的答案@Flav。我會研究這個。我的項目目前在jinja2中,所以我對django非常不熟悉。 – puoyaahhh 2014-10-13 17:32:24

+0

我的不好,我以爲這是涉及Django – 2014-10-13 17:40:06