2014-07-23 29 views
4

我在使用Restangular與我的Django-Tastypie後端對話而不是$resource的Angular webapp上使用ngTagsInput。對於自動完成,我正在加載一個列表爲Restangular.all('technology').getList({'slug__startswith':q});,它爲我的模型添加了一個元素。然後,我可以在我的模型上執行PUT以保存它。在PUT之前從對象中移除Restangular特定數據

問題是,我模型中的元素是純淨的,非Restangulariezed對象(因爲它們是由Restangular.one提取的),並且當我以這種方式添加標記時,添加的元素是Restangularized(具有Restangular特定方法和屬性)。當然,這會引發500錯誤。任何出路?

我知道我可以像這樣添加一個自定義響應提取器。

RestangularProvider.setResponseExtractor(function(response) { 
    var newResponse = response; 
    if (angular.isArray(response)) { 
    angular.forEach(newResponse, function(value, key) { 
     newResponse[key].originalElement = angular.copy(value); 
    }); 
    } else { 
    newResponse.originalElement = angular.copy(response); 
    } 

    return newResponse; 
}); 

但我正在尋找最乾淨的方式來做到這一點。

編輯:更多的數據。

如何technology對象應該是這樣的:

{0: Object 
category: "LNG" 
created: "2014-07-17T18:17:19.350286" 
description: "" 
id: 5 
modified: "2014-07-24T13:15:16.618184" 
name: "Python" 
resource_uri: "/api/v1/technology/python" 
slug: "python" 
verified: true} 

怎麼看起來像,被Restangularized後:

{addRestangularMethod: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
all: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
allUrl: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
category: "LNG" 
clone: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
created: "2014-07-17T18:17:19.350286" 
customDELETE: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
customGET: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
customGETLIST: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
customOperation: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
customPOST: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
customPUT: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
description: "" 
doDELETE: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
doGET: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
doGETLIST: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
doPOST: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
doPUT: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
fromServer: true 
get: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
getList: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
getParentList: function(){return g} 
getRequestedUrl: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
getRestangularUrl: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
head: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
id: 5 
modified: "2014-07-24T13:15:16.618184" 
name: "Python" 
one: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
oneUrl: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
options: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
parentResource: null 
patch: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
plain: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
post: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
put: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
remove: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
reqParams: null 
resource_uri: "/api/v1/technology/python" 
restangularCollection: false 
route: "technology" 
save: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
several: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
slug: "python" 
trace: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)} 
verified: true 
withHttpConfig: function t(){if(r){var n=p(r);be.apply(n,arguments)}if(this instanceof t){var o=nt(e.prototype),n=e.apply(o,n||arguments);return wt(n)?n:o}return e.apply(u,n||arguments)}} 
+0

您可以連接與數據的內容一例添加一個乾淨的()方法。 –

+0

@BartoszDabrowski完成。我確信我必須在對象上執行.plain(),但不知何故,我無法弄清楚在哪裏,因爲ngTagsInput需要一個承諾,並且我無法在承諾解決之前修改結果。我想我需要寫出一個新的承諾,完全包裝這個承諾。 – theG33k

回答

2

我看到GitHub的這種方法來清理從Restangularized數據對象,它正在完成這項工作。

data = Restangular.stripRestangular(RestangularObjectToClean) 

mgonto說,他打算在這個問題上#667