我有一个mySql数据库与非标准的ID和字段名称,所以我试图使用jsonResultsAdapterProvider和setRestangularFields。这里是我的app.config文件中的代码:使用Restangular,当需要重写id字段时,可以使用jsonResultsAdapterProvider吗?
RestangularProvider.setBaseUrl(remoteServiceName);
RestangularProvider.setRestangularFields({id: 'personID'});
RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
if (data.error) {
return data.error;
}
var extractedData = data.result;
return jsonResultsAdapterProvider.$get().camelizeKeys(extractedData);
});
RestangularProvider.addRequestInterceptor(function(elem, operation, what, url) {
return jsonResultsAdapterProvider.$get().decamelizeKeys(elem);
});
这一切都很好,直到我尝试做一个put/save。当我查看浏览器开发工具中的请求负载时,它是:{"undefined":12842}
(但url正确,所以我知道该id已设置)如果我不使用ResultsAdapter并将id字段更改为Person_ID
,则负载看起来不错,所以我知道我正在调用Get和Save the Restangular对象。但对于它的价值,这里是代码:
$scope.tests = Restangular.all('members').getList().$object;
vm.testEdit = function() {
$scope.test = Restangular.one('members', 12842).get().then(function(test) {
var copy = Restangular.copy(test);
copy.title = 'xxxx';
copy.put(); // payload was: undefined: 12842
});
}
// I also tried customPUT...
// copy.customPUT(copy, '', {}, {'Content-Type':'application/x-www-form-urlencoded'});
我也试着“修复”id其他方式了。像这样:
Restangular.extendModel('members', function(model) {
model.id = model.personID;
return model;
});
但这搞砸了网址,导致丢失ID。我试图getIdFromElem
,但只得到了呼吁与Restangular.one()
创建我的对象,而不是与Restangular.all()
Restangular.configuration.getIdFromElem = function(elem) {
console.log('custom getIdFromElem called');
if (elem.route === 'members') { // this was never true
return elem[personID];
}
};
好像Restangular需要在替代“PERSONID”大部分时间,但也许它需要“PERSON_ID”保存期间的某些点?任何想法,我可以尝试让保存工作?