2014-09-22 38 views
0

例子:爲什麼UnderscoreJS的_.extend()方法將AngularJS承諾複製到擴展對象?

$scope.post = Posts.get({id: id}); 
scope = _.extend({}, $scope); 

alert($scope.post.id); // undefined 
alert(scope.post.id); // exception - post is not defined 

我覺得我做的事情顯然是錯誤的,但我想不出什麼。我預期的post參考淺複製到新的對象:

alert($scope.post.id); // undefined 
alert(scope.post.id); // undefined 
$scope.post === scope.post; // true 
+1

你不是真的添加任何東西,所以你可以做。 'scope = $ scope。$ new()'。另外發布將是一個承諾的權利? – PSL 2014-09-22 22:23:26

+0

@PSL謝謝。我確實把它看作是我的用例的解決方案。但是,如果這種方式行不通,我幾乎退出網絡開發,所以我很想知道答案。 – colllin 2014-09-22 22:25:50

+0

是@PSL,'post'將是一個承諾。我將更新問題標題以使用正確的術語。 – colllin 2014-09-22 22:27:14

回答

0

這是從角文檔約ngResource

意識到調用$資源對象的方法 立即返回一個很重要空引用(對象或數組,取決於 isArray)。一旦數據從服務器返回,現有的 引用就會填充實際數據。這是一個有用的技巧 ,因爲通常該資源被分配給由視圖呈現的模型,然後 。有一個空對象導致沒有渲染, 一旦數據從服務器到達,然後對象與數據填充 和視圖自動重新呈現自己顯示 新數據。這意味着在大多數情況下,從不必爲動作方法編寫回調函數 。

當您試圖擴展範圍時,您的對象不完全在那裏。 我希望這有助於...

+0

'$ scope.post'是一個引用,由於'_.extend(...)'執行對象屬性的淺拷貝,它應該將引用複製到'scope .post'。無論是在承諾解決之前還是之後,都沒有什麼不同 - 參考是一樣的。 – colllin 2014-09-23 04:50:13