2014-12-03 58 views
0

我有一個MEAN應用程序正在工作。我正在使用angular ui sortable來管理列表。

我想在頁面刷新時保持列表的順序。以下函數爲數組中的每個present對象提交$http.post請求。

它工作正常,如果我用按鈕觸發它。但我希望每當用戶更新列表的順序時都會觸發它。

$scope.sortPresents = function() { 
    for (var j=0; j < $scope.presents.length; j++) { 
     $scope.presentClientToDB(j); 
    } 
}; 

$scope.presentClientToDB = function(a) { 

    var tmpId = $scope.presents[a]._id; 

    $http.post('/api/presents/' + tmpId, { 
     title: $scope.presents[a].title, 
     notes: $scope.presents[a].notes, 
     link: $scope.presents[a].link, 
     index: $scope.presents[a].index 
    }) 
    .success(function(data) { 
     console.log('great success posting data!'); 
    }) 
    .error(function(data) { 
     console.log('error: ' + data); 
    }); 
}; 

在我view,我在更新列表中調用這個sortPresents()功能:

<ul ui-sortable="{update: sortPresents()}" ng-model="presents" class="list-group"> 
    ... 
</ul> 

結冰我的應用程序,並導致我的終端POST請求的重複洪流(在快結束時,使用morgan)。

據我所知,當點擊並拖動一個列表項時,可重複調用UI排序的函數update。所以我試着把這個函數作爲stop的方法,沒有用。

有關如何解決或更好地實現此目的的想法?

+0

你在做什麼?發佈到/ api/presents /與排序列表有什麼關係?爲什麼要爲列表中的每個項目執行此操作?你是否隨時更新每個禮物的單獨api調用? – 2014-12-03 20:58:49

+0

當一個項目在列表中移動時,其「索引」會隨着列表中所有後續項目的索引一起更改。我需要更新受影響的'present'的'index'屬性。實際上,我沒有對任何東西進行排序,所以這是一個命名不佳的函數。列表中的每個列表在服務器端都有一個對應的模型,並通過獨特的API調用進行更新。 – 2014-12-03 21:22:16

+0

'Sort'事件被重複調用。 'Update'和'Stop'被調用一次。 – 2014-12-04 02:00:44

回答

0

在你的UI排序選項中,你需要設置函數變量 - 不調用函數。因此改爲ui-sortable="{stop: sortPresents}"(不帶括號):

<ul ui-sortable="{stop: sortPresents}" ng-model="presents" class="list-group"> 
    ... 
</ul>