Я использую AngularJS с модулем с угловым выбором.
Чтобы заполнить страницу необходимыми элементами, я использую что-то вроде этого:
<selectize
ng-repeat="select in selects_data track by $index"
config="selectizeConfig"
options="select.options"
ng-model="selects_models[select.name]">
</selectize>
$scope.update_data = function(){
//I'm using AngularJS resource to get the JSON data from the server
$scope.selects_data = StatesTableControl.get({'path': $scope.element.path},
function(data){
//Success
angular.forEach(data, function(item){
$scope.selects_models[item.name] = item.current_id
});
}, function(error){
//Error
}
);
};
$scope.update_data();
$interval($scope.update_data, 3000);
Независимо от того, использую ли я track by $index
, track by select.name
или вообще не использую его, все <selectize></selectize>
полностью перерисовываются каждый раз, когда я обновляю массив selects_data
с данными, полученными из сервер, даже если содержимое массива будет одинаковым после обновления.
Я не нашел рецепта, чтобы решить его сам. И я не могу понять, почему track by
помогает с тем же, когда я использую его внутри div
или других элементов.
Я буду очень рад, если кто-то поможет в этом вопросе!
Я не думаю, что это имеет какое-либо отношение к тому, как вы отслеживаете предметы. Если StatesTableControl.get
возвращает новые объекты каждый раз, когда вы его вызываете, я думаю, что угловые считают, что они разные объекты, даже если они содержат одни и те же данные.
Вы можете отправлять только те объекты, которые были изменены, или поддерживать номер версии для объектов, чтобы вы знали те, которые не изменились, и вы их не заменяете.
selects_data
?