我无法理解为什么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来使用查询回调,或者有人可以看到为什么在地球上这不起作用?
答案 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);
});
});
}
};