0

Restangular が jquery-ui コールバック内で他の場所と異なる動作をする理由がわかりません。あなたはできる?

以下は私のコントローラーで動作します:

Restangular.all('skills').getList().then(function(result) {
  console.log(result);
});

ただし、(angular-select2 を介して) jquery-ui-select2 のクエリ関数内で Restangular を使用すると、要求が行われません。

HTML:

<input type="text" ui-select2="skillOptions" ng-model="skills">

JavaScript:

$scope.skillOptions = {
  multiple: true,
  query: function(query) {
    // I see this:
    console.log("Q:", query.term);
    // this silently fails:
    Restangular.all('skills').getList({
      query: query.term
    }).then(function(body) {
      // this callback is never reached (nor is the error one)
      var skills = body.skills;
      console.log("got skills", skills);
      query.callback({
        data: {
          text: 'name',
          results: skills
        }
      });
    }, function(error) {
      console.error("Error getting skills", error);
    });
  }
};

Restangular でクエリ コールバックを使用する別の方法はありますか、それとも地球上でこれが機能しない理由を誰かが理解できますか?

4

1 に答える 1

0

解決策は、ドキュメントのこのビット$scope.$applyに従って(AngularJSバージョン1.1.5を使用しているため)コールバックをネストすることでした

ここにいくつかの作業コードがあります:

$scope.skillOptions = {
  multiple: true,
  query: function(query) {
    $scope.$apply(function() {
      Restangular.all('skills').getList({
        query: query.term
      }).then(function(body) {
        var skills;
        skills = body.skills;
        console.log("got skills", skills);
        return query.callback({
          results: _(skills).map(function(s) {
            return {
              text: s.name,
              id: s.id
            };
          })
        });
      }, function(error) {
        console.log("Error getting skills", error);
      });
    });
  }
};
于 2013-10-05T10:31:22.160 に答える