2014-02-13 21 views
0

所以,這裏是我有問題:如何解決這個JavaScript變量引用亂七八糟

app.controller 'MainCtrl', ($scope, TestData) -> 
    $scope.name = 'World' 
    TestData.get(0).then (data)-> 
    $scope.elem = data 
    TestData.get(1).then (data)-> 
    $scope.elem2 = data 

    $scope.callFunc = -> 
    TestData.modify1() 
    TestData.modify2() 

app.factory 'TestData', ($q,$timeout)-> 

    data = [{ 
    name: "TestData #1" 
    id: 1 
    },{ 
    name: "TestData #2" 
    id: 2 
    }] 


    funcs = {} 

    funcs.get = (id)-> 
    deferred = $q.defer() 
    $timeout(-> 
     deferred.resolve(data[id]) 
    ,500) 
    return deferred.promise 

    funcs.modify1 = -> 
    data[0].name = "DataTest #1" 

    funcs.modify2 = -> 
    data[1] = { 
     name: "DataTest #2" 
     id 
    } 

    return funcs 

我不知道我解決這個怎麼弄,但我想在一個數組來更新一個元素。我明白替換它是行不通的。但我該如何解決這個問題?

如果它只是名稱/ ID它不會是一個問題。但實際的模型有很多不同的數據,我不想單獨更新它們。

這裏是一個展示plnkr問題(如果它幫助):http://plnkr.co/edit/cBXJsIghlIeIUQGLfZfe?p=info

(我不明白爲什麼後面不起作用的理論,我主要是尋找最有效的方式來解決這個問題。)

+1

如何使用angular.extend覆蓋舊對象中的屬性? http://plnkr.co/edit/SZa4KUMp7MtG3FxNaoVY –

回答

1

爲對象in的所有屬性複製到目標out,你可以這樣做:

for k of in 
    out[k] = in[k] 

我不知道究竟你在做什麼(不是太熟悉角),但你可能GE這裏有一些想法:http://plnkr.co/edit/LKb6NQ4u0dORLya42LED

$scope.callFunc = -> 
    TestData.modify $scope.elem, 0 
    TestData.modifyAlt $scope.elem2, 1 

... 


funcs.modify = (incoming,i)-> 
    console.log "incoming:",incoming 
    for k of incoming 
    data[i][k] = incoming[k] 

funcs.modifyAlt = (outgoing,i)-> 
    console.log "data[i]:",data[i] 
    for k of data[i] 
    outgoing[k] = data[i][k] 
+0

數據來自我的服務器API。如果它在服務器上發生變化,我會告訴客戶端重新加載它,然後它會斷開參考。我試圖避免這種情況,因爲它使我的實現過於複雜。 – Neikos

相關問題