1

AJAX我的問題是非常相似的this post 'Using typeahead and ajax in a AngularJS app'AngularJS UI引導預輸入使用的CoffeeScript

的CoffeeScript:

$scope.tradingPartners = (searchOn) -> 
    console.log("Searching on #{searchOn}") 
    $.getJSON("../tp/tpLookupAdmin", {term: searchOn, max: 20}, (response)-> 
     response) 

生成JavaScript:

$scope.tradingPartners = function(searchOn) { 
     console.log("Searching on " + searchOn); 
     return $.getJSON("../tp/tpLookupAdmin", { 
     term: searchOn, 
     max: 20 
     }, function(response) { 
     return response; 
     }); 
    }; 

使用它:

<input type="text" ng-model="testScript.sender" typeahead="sender as sender.label for sender in tradingPartners($viewValue)" 

那麼最新錯誤? ...

getJSON調用做得很好,結果看起來不錯,但typeahead沒有做任何事情。如果我把硬編碼的值作爲函數的返回值,那麼它工作得很好。

現在我知道的getJSON不只是返回一個對象數組,並做

$.getJSON("../tp/tpLookupAdmin", {term: searchOn, max: 20}, (response)-> 
     response).responseJSON 

給出定義。

的作品

實例硬編碼的JSON:

[{"id":"1","label":"test1"},{"id":"2","label":"test2"}] 

我簡單的東西在這裏...

編輯(從kju答案):

現在gen之類JS是

$scope.tradingPartners = function(searchOn) { 
    return $http.post("../tp/tpLookupAdmin?term=" + searchOn).then(function(response) { 
    return limitToFilter(response, 15); 
    }); 
}; 

但它仍然沒有工作...

回答

4

你提到的問題已經有了你需要的所有答案,所以你的問題確實不是一個好問題。

查找函數必須返回一個數組或一個(AngularJS樣式)的promise。你返回的是$ .getJSON的返回值,它既不是。代碼中的回調函數將返回一個數組,但無處可去。它不會以Angular結尾。這無法幫助,因爲您在此處發出異步HTTP請求。當請求返回時,您的查找函數早已返回。因此你需要返回一個承諾。 AngularJS知道如何處理這個承諾並處理延期數據。

正如我所說,另一個問題及其接受的答案已經包含了一切。擺脫$ .getJSOn並使用Angular的$ http服務,就像它在那裏顯示的那樣。

+0

謝謝您的回答,我修改,我覺得JS看起來不錯,但仍然是前進不起作用......將繼續嘗試。 – Steve

0

最後我用select2去了。無論如何,我認爲它是一個更清晰,更一致的方法。

<input ui-select2="tpSearch" ng-model="testScript.sender" class="input-xlarge"/> 

的CoffeeScript:

$scope.tpSearch = 
    placeholder: "Type to search..." 
    minimumInputLength: 2 
    ajax: 
     url: "../tp/tpLookupPaged" 
     quietMillis: 100 
     data: (term, page) -> 
     term: term # query params 
     page: page 
     max: 10 
     results: (data, page) -> 
     more = (page * 10) < data.total 
     results: data.results, more: more 

實現無限滾動是一件輕而易舉的事。

確保您的JSON返回數組包含ID和文本或者你必須寫選擇2自定義格式功能(足夠容易反正)