我所拥有的是简单的 CRUD 操作。项目在页面上列出,当用户单击按钮添加时,弹出模式,用户输入数据,数据被保存并应自动(无需刷新)添加到页面列表中。
服务:
getAllIncluding: function(controllerAction, including) {
var query = breeze.EntityQuery.from(controllerAction).expand(including);
return manager.executeQuery(query).fail(getFailed);
},
addExerciseAndCategories: function(data, initialValues) {
var addedExercise = manager.createEntity("Exercise", initialValues);
_.forEach(data, function(item) {
manager.createEntity("ExerciseAndCategory", { ExerciseId: addedExercise._backingStore.ExerciseId, CategoryId: item.CategoryId });
});
saveChanges().fail(addFailed);
function addFailed() {
removeItem(items, item);
}
},
控制器:
$scope.getAllExercisesAndCategories = function() {
adminCrudService.getAllIncluding("ExercisesAndCategories", "Exercise,ExerciseCategory")
.then(querySucceeded)
.fail(queryFailed);
};
function querySucceeded(data) {
$scope.queryItems = adminCrudService.querySucceeded(data);
var exerciseIds = _($scope.queryItems).pluck('ExerciseId').uniq().valueOf();
$scope.exerciseAndCategories = [];
var createItem = function (id, exercise) {
return {
ExerciseId: id,
Exercise : exercise,
ExerciseCategories: []
};
};
// cycle through ids
_.forEach(exerciseIds, function (id) {
// get all the queryItems that match
var temp = _.where($scope.queryItems, {
'ExerciseId': id
});
// go to the next if nothing was found.
if (!temp.length) return;
// create a new (clean) item
var newItem = createItem(temp[0].ExerciseId, temp[0].Exercise);
// loop through the queryItems that matched
_.forEach(temp, function (i) {
// if the category has not been added , add it.
if (_.indexOf(newItem.ExerciseCategories, i.ExerciseCategory) < 0) {
newItem.ExerciseCategories.push(i.ExerciseCategory);
}
});
// Add the item to the collection
$scope.items.push(newItem);
});
$scope.$apply();
}
这是我从控制器添加新数据的方法:
adminCrudService.addExerciseAndCategories($scope.selectedCategories, { Name: $scope.NewName, Description: $scope.NewDesc });
所以我的问题是,为什么列表没有实时更新(当我点击保存时,我必须刷新页面)。
编辑
这是我的查询已成功
querySucceeded: function (data) {
items = [];
data.results.forEach(function(item) {
items.push(item);
});
return items;
}
编辑 2
我相信我已经缩小了我的问题!
所以PW Kad 浪费了两个小时,我试图帮助我解决这个问题(我非常非常非常感谢他),但不幸的是没有成功。我们主要尝试修复我的服务,所以当我回到我的电脑时,我再次尝试修复它。我相信我的服务很好。(正如 Kad 在他的回答中建议的那样,我做了一些改变)。我相信问题出在控制器中,我已经记录了 $scope.items,当我添加新项目时它们没有改变,之后我记录了 $scope.queryItems,我注意到它们在添加新项目后发生了变化项目(无刷新)。因此,在加载初始数据后,可能会通过某种方式 $watching $scope.queryItems 解决问题,但目前我不太确定如何执行此操作。