如何使用Restangular填充jQuery UI Select2

时间:2013-10-02 19:17:21

标签: javascript angularjs angular-ui jquery-select2

我无法理解为什么Restangular会在jquery-ui回调中的行为方式与其他地方的方式不同。你能吗?

以下在我的控制器中有效:

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

但是,当我在jquery-ui-select2的查询函数中使用Restangular时(通过angular-select2),它永远不会发出请求。

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来使用查询回调,或者有人可以看到为什么在地球上这不起作用?

1 个答案:

答案 0 :(得分:0)

解决方案是将回调嵌套在$scope.$apply(因为我在AngularJS版本1.1.5上),按照this bit of the documentation

这是一些有效的代码:

$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);
      });
    });
  }
};