2008-09-10 19 views

Odpowiedz

12

Ponieważ Google Web Toolkit to subset of Java, działa najlepiej, gdy Java jest również w backend. Ponieważ Google App Engine to obecnie Python only myślę, że musielibyście zrobić wiele hałasu, żeby twój serwer i klient ładnie ze sobą rozmawiali.

jQuery wydaje się być najpopularniejszą opcją biblioteki JavaScript w AJAX Tag at DjangoSnippets.com.

Edytuj: Powyższe dotyczy tylko aplikacji Google App Engine napisanych w języku Python. Ponieważ Google App Engine obsługuje teraz język Java, GWT może być teraz dobrym wyborem do pisania na interfejsie AJAX. Google even have a tutorial showing you how to do it.

+2

http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html <- Najnowsze położenie powyższego podręcznika. Chciałbym mieć przedstawiciela do edycji. ;) – Drew

+0

@Drew - Zaktualizowano adres URL w odpowiedzi. Dzięki za heads up. –

+0

Dzięki Dave. Ach, przypuszczam, że to wyklucza możliwość używania Google Web Toolkit jako ramy AJAX dla GAE. Szkoda! Czy istnieją inne ramy? – Graviton

3

Polecam zajrzeć do czystego javascript framework (prawdopodobnie Jquery) dla twojego kodu po stronie klienta i napisać usługi JSON w pythonie - to wydaje się być najłatwiejszy/najskuteczniejszy sposób na zrobienie.

Google Web Toolkit umożliwia napisanie interfejsu użytkownika w języku Java i skompilowanie go do javascript. Jak mówi Dave, może to być lepszy wybór, jeśli backend jest w Javie, ponieważ ma ładne hooki RPC dla tego przypadku.

1

jQuery to świetna biblioteka, ale także sprawdź numer Prototype JavaScript framework. To naprawdę zmienia JavaScript z bycia nieporęcznym językiem w piękny i elegancki język.

4

Nie ma powodu, dla którego nie powinieneś używać razem GAE i Google Web Toolkit (GWT). Piszesz swój kod zaplecza w Pythonie i kod frontendowy w Javie (i prawdopodobnie trochę JavaScript), który jest następnie kompilowany do JavaScript. Korzystając z innego środowiska AJAX, będziesz mieć tę różnicę między językiem po stronie serwera i klienta.

GWT ma funkcje, które ułatwiają zdalne wywoływanie kodu java na serwerze, ale są one całkowicie opcjonalne. Możesz po prostu używać interfejsów JSON lub XML, tak jak w innych frameworkach AJAX.

GWT 1.5 zawiera również typy nakładek JavaScript, które w zasadzie pozwalają traktować fragment danych JSON jak obiekt Java podczas tworzenia kodu po stronie klienta. Możesz przeczytać więcej na ten temat here.

Aktualizacja:

Teraz Google dodała obsługę Java dla Google App Engine, można rozwijać zarówno backend i frontend kod w Javie na pełnym Google stack - jeśli chcesz. Jest fajna wersja Eclipse plugin firmy Google, która bardzo ułatwia opracowywanie i wdrażanie aplikacji korzystających z GAE, GWT lub obu.

0

Obecnie używam JQuery dla mojej aplikacji GAE i działa to dla mnie pięknie. Mam wykres (wykresy google), który jest dynamiczny i używa wywołania Ajax do pobrania ciągu JSON. Wydaje mi się, że to naprawdę działa dobrze.

2

Możesz chcieć rzucić okiem na Pyjamas (http://pyjs.org/), która jest "GWT dla Pythona".

4

Oto jak wdrożyliśmy Ajax w Google App Engine, ale pomysł można uogólnić na inne platformy.

Mamy skrypt obsługi dla żądań Ajax, który odpowiada - na pewno - z odpowiedziami JSON. Struktura wygląda mniej więcej tak (jest to fragment standardowego skryptu handler GAE):

def Get(self, user): 
    self.handleRequest() 

def Post(self, user): 
    self.handleRequest() 


def handleRequest(self):   
    ''' 
    A dictionary that maps an operation name to a command. 
    aka: a dispatcher map. 
    ''' 
    operationMap = {'getfriends':    [GetFriendsCommand], 
        'requestfriend':   [RequestFriendCommand, [self.request.get('id')]], 
        'confirmfriend':   [ConfirmFriendCommand, [self.request.get('id')]], 
        'ignorefriendrequest':  [IgnoreFriendRequestCommand, [self.request.get('id')]], 
        'deletefriend':    [DeleteFriendCommand, [self.request.get('id')]]} 

    # Delegate the request to the matching command class here. 

Polecenia są proste wdrożenie wzoru polecenia:

class Command(): 
    """ A simple command pattern. 
    """ 
    _valid = False 
    def validate(self): 
     """ Validates input. Sanitize user input here. 
     """ 
     self._valid = True 

    def _do_execute(self): 
     """ Executes the command. 
      Override this in subclasses. 
     """ 
     pass 

    @property 
    def valid(self): 
     return self._valid 

    def execute(self): 
     """ Override _do_execute rather than this. 
     """ 
     try: 
      self.validate() 
     except: 
      raise 
     return self._do_execute() 

    # Make it easy to invoke commands: 
    # So command() is equivalent to command.execute() 
    __call__ = execute 

Po stronie klienta, możemy utwórz delegata Ajax. Prototype.js ułatwia to pisanie i zrozumienie. Oto fragment:

/** 
* Ajax API 
* 
* You should create a new instance for every call. 
*/ 
var AjaxAPI = Class.create({ 
    /* Service URL */ 
    url: HOME_PATH+"ajax/", 

    /* Function to call on results */ 
    resultCallback: null, 

    /* Function to call on faults. Implementation not shown */ 
    faultCallback: null, 

    /* Constructor/Initializer */ 
    initialize: function(resultCallback, faultCallback){ 
     this.resultCallback = resultCallback; 
     this.faultCallback = faultCallback; 
    }, 

    requestFriend: function(friendId){ 
     return new Ajax.Request(this.url + '?op=requestFriend', 
     {method: 'post', 
     parameters: {'id': friendId}, 
     onComplete: this.resultCallback 
     });  
    }, 

    getFriends: function(){ 
     return new Ajax.Request(this.url + '?op=getfriends', 
     {method: 'get', 
     onComplete: this.resultCallback 
     });  
    } 

}); 

zadzwonić delegata, można zrobić coś takiego:

new AjaxApi(resultHandlerFunction, faultHandlerFunction).getFriends() 

Mam nadzieję, że to pomoże!

7

Dobrym sposobem jest użycie biblioteki AJAX, aby skorzystać z Google's AJAX Libraries API service. Jest to nieco szybsze i czystsze niż pobieranie JS i umieszczanie go w folderze /static/ i nie zawiera limitu dysku.

w waszym Javascript by po prostu umieścić na przykład:

google.load("jquery", "1.3.2"); 

i/lub

google.load(google.load("dojo", "1.3.0"); 

Gdzieś w nagłówku będzie można umieścić coś takiego:

<script src="http://www.google.com/jsapi?key=your-key-here"></script> 

I to wszystko, czego potrzebujesz do korzystania z bibliotek API Google.

0

Firma Google ogłosiła niedawno wersję Java App Engine Google. Ta wersja zawiera również wtyczkę Eclipse, która ułatwia tworzenie aplikacji GAE z GWT.

Zobacz szczegóły tutaj: http://code.google.com/appengine/docs/java/overview.html

oczywiście byłoby wymagać, aby przerobić swoją aplikację w Javie zamiast pytona, ale jako ktoś, kto pracował z GWT, powiem ci, zalety korzystania z nowoczesnych IDE na bazie kodu AJAX są całkowicie tego warte.

2

spróbuj także GQuery for GWT. Jest to kod Java:

public void onModuleLoad() { 
    $("div").css("color", "red").click(new Function() { 
     public void f(Element e) { 
      Window.alert("Hello"); 
      $(e).as(Effects).fadeOut(); 
     } 
    }); 
} 

kod Być Java skutkuje nieco drogie czasie kompilacji (Java-> JavaScript) optymalizacje i łatwiejsze refaktoryzacji.

Fajnie, nie jest?

3

W moim blogu mam do czynienia z prostym sposobem - link: AJAX with Google App Engine. Dołączam cały kod javascript i python, którego użyłem.

+0

W tym łączu mogą być przydatne informacje, ale kod w przykładzie jQuery jest uszkodzony. – brainjam