【发布时间】:2015-07-02 10:44:58
【问题描述】:
我有一个带有非标准 ID 和字段名称的 mySql 数据库,因此我尝试同时使用 jsonResultsAdapterProvider 和 setRestangularFields。这是我的 app.config 文件中的代码:
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);
});
在我尝试进行放置/保存之前,一切都很好。当我在浏览器开发工具中查看请求负载时,它是:{"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;
});
但是这弄乱了 url,导致缺少 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”?关于我可以尝试如何让保存工作的任何想法?
【问题讨论】:
标签: restangular