source: Dev/branches/rest-dojo-ui/client/rft/elastic/ElasticReadStore.js @ 367

Last change on this file since 367 was 367, checked in by jkraaijeveld, 13 years ago

Session page now has support for autocompletion (currently works on question titles but can change it easily if we introduce users).

File size: 1.5 KB
Line 
1define(["dojo", "dojox", "dojo/json"], function(dojo, dojox, JSON) {
2        dojo.provide("rft.elastic.ElasticReadStore");
3
4        dojo.require("dojox.data.QueryReadStore");
5
6        dojo.declare("rft.elastic.ElasticReadStore", dojox.data.QueryReadStore, {
7            fetch:function(request){
8                var attr = Object.keys(request.query)[0];
9                request.serverQuery = dojo.toJson({
10                                                                query:
11                                                                {
12                                                                        query_string:
13                                                                        {
14                                                                                default_field: attr,
15                                                                                query: request.query[attr]
16                                                                        }
17                                                                }
18                                                        });
19                    // Call superclasses' fetch
20                    return this.inherited("fetch", arguments);
21                  },
22                _fetchItems: function(request, fetchHandler, errorHandler){
23                        var serverQuery = request.serverQuery;
24                        var xhrHandler = dojo.xhrPost( { url:this.url,
25                                                                handleAs: "json",
26                                                                postData: serverQuery });
27                        request.abort = function(){
28                                xhrHandler.cancel();
29                        };
30                        xhrHandler.addCallback(dojo.hitch(this, function(data){
31                                this._xhrFetchHandler(data, request, fetchHandler, errorHandler);
32                        }));
33                        xhrHandler.addErrback(function(error){
34                                errorHandler(error, request);
35                        });
36                },
37                _xhrFetchHandler: function(data, request, fetchHandler, errorHandler) {
38                        data = this._filterResponse(data);
39                        this._items = [];
40                        var numHits = data.hits.total || -1;
41                        if(numHits > 0) {
42                                this._items.push({i:data.hits.hits[0]._source, r:this, n:0});
43                        }
44                        fetchHandler(this._items, request, data.hits.total);
45                        this._numRows = data.hits.total;
46                }
47        });
48})
Note: See TracBrowser for help on using the repository browser.