Javascript 如何使用Restanglar填充jQuery UI Select2

Javascript 如何使用Restanglar填充jQuery UI Select2,javascript,angularjs,angular-ui,jquery-select2,Javascript,Angularjs,Angular Ui,Jquery Select2,我不明白为什么Restangular在jQueryUI回调中的行为会与在其他任何地方的行为有所不同。你能吗 以下功能在我的控制器中工作: Restangular.all('skills').getList().then(function(result) { console.log(result); }); 但是,当我在jquery-ui-select2的查询函数中使用restanglar(通过angular-select2)时,它从不发出请求 HTML: 有没有其他方法可以将查询回调与Re

我不明白为什么Restangular在jQueryUI回调中的行为会与在其他任何地方的行为有所不同。你能吗

以下功能在我的控制器中工作:

Restangular.all('skills').getList().then(function(result) {
  console.log(result);
});
但是,当我在jquery-ui-select2的查询函数中使用restanglar(通过angular-select2)时,它从不发出请求

HTML:


有没有其他方法可以将查询回调与Restangular一起使用,或者任何人都能看出这到底为什么不起作用?

解决方案是将回调嵌套在
$范围内。$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);
      });
    });
  }
};
$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);
    });
  }
};
$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);
      });
    });
  }
};