2013-10-02 1 views
0

Я не вижу, почему Restangular будет вести себя по-разному в обратном вызове jquery-ui так, как это происходит в другом месте. Ты можешь?Как заполнить пользовательский интерфейс jQuery Select2 с помощью Restangular

следующие работы в моем контроллере:

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

Однако, когда я использую Restangular внутри функции запроса для JQuery-UI-выбор2 (через угловую-выбор2), он никогда не делает запрос.

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 или кто-нибудь может понять, почему на Земле это не будет работать?

ответ

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