1

私の質問は、この投稿「AngularJS アプリで typeahead と ajax を使用する」に非常に似ています

コーヒースクリプト:

  $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 呼び出しは正常に行われ、結果は良好に見えますが、先行入力は何もしません。関数からの戻り値としてハードコードされた値を入れると、問題なく動作します。

これで、getJSON がオブジェクト配列を返すだけではないことがわかりました。

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

undefined を返します。

動作するハードコードされた json の例:

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

ここで簡単なものが欠けています...

編集(kju回答から):

現在、生成された JS は

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

しかし、まだ機能していません...

4

2 に答える 2

0

結局、select2を使用しました。とにかく、私の場合は、よりクリーンで一貫したアプローチだと思います。

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

コーヒースクリプト:

$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 と text を含む配列を返すことを確認してください。そうしないと、select2 のカスタム フォーマッタ関数を作成する必要があります (とにかく簡単です)。

于 2013-10-01T00:57:11.000 に答える