我最近有一個要求是實現一個用於管理多關係的UI。沃德貝爾友善地提供this plunker顯示如何使用1米-1與角和微風。微風1-m-1在HotTowel Angular與本地存儲
我的應用程序的設計主要基於John Papa最近推出的Pluralsight課程(主要基於datacontext和本地存儲)。
在我的應用程序,BusUnit =英雄和尺寸=功率(參考病區的例子。
一切似乎運作良好時,我強迫應用從服務器獲取數據,在我更新到業務單位的尺寸反映正確的,我現在面臨的問題是,當我從頁面導航離開和回來(這會從本地存儲數據)。在這種情況下:。
- 如果我以前添加一個新的維度到一個業務部門,一切都很好,但是
- 如果我以前標記過商家單位的維度用於刪除和保存,維度仍然出現在相關業務單位中。
這是控制器代碼,最初得到業務部門和它們的尺寸:
function getdboardStructure() {
var busUnitsPromise = datacontextSvc.busUnits.getByDboardConfigId(vm.dboardConfig.id);
var dimensionsPromise = datacontextSvc.dimensions.getByDboardConfigId(vm.dboardConfig.id);
$q.all([busUnitsPromise, dimensionsPromise])
.then(function (values) {
vm.busUnits = values[0];
vm.dims = values[1];
createBusUnitVms();
//vm.currentBusUnitVm = vm.busUnitVms[0]; // not required as using accordion instead of drop-down
vm.hasChanges = false;
});
}
這是我的控制器準備的代碼保存:
function applyBusUnitDimensionSelections(busUnitVm) {
var busUnit = busUnitVm.busUnit;
var mapVms = busUnitVm.dimensionMapVms;
var dimensionHash = createBusUnitDimensionHash(busUnit);
mapVms.forEach(function (mapVm) {
var map = dimensionHash[mapVm.dimension.id];
if (mapVm.selected) {
if (!map) {
datacontextSvc.busUnits.addBusUnitDimension(busUnit, mapVm.dimension)
.then(function() {
});
}
} else {
if (map) {
datacontextSvc.markDeleted(map);
}
}
});
}
這是代碼在我的控制器執行保存:
function save() {
if (!canSave()) {
return $q.when(null);
}
vm.isSaving = true;
vm.busUnitVms.forEach(applyBusUnitDimensionSelections);
return datacontextSvc.save().then(function (saveResult) {
vm.isSaving = false;
trapSavedDboardConfigId(saveResult); // not relevant to use case
}, function (error) {
vm.isSaving = false;
});
}
這是我的存儲庫添加新busUnitDimension實體代碼:
function addBusUnitDimension(busUnit, dimension) {
var newBusUnitDimension = this.em.createEntity(busUnitDimension);
newBusUnitDimension.busUnitId = busUnit.id;
newBusUnitDimension.dimensionId = dimension.id;
return this.$q.when(newBusUnitDimension);
}
這是我打標刪除了一個項目的DataContext代碼:
function markDeleted(entity) {
return entity.entityAspect.setDeleted();
}
最後,這是庫代碼來獲得業務單元和它們的連接表實體:
function getByDboardConfigId(dboardConfigId, forceRefresh) {
var self = this;
var predicate = pred.create('dboardConfigId', '==', dboardConfigId);
var busUnits;
if (self.zStorage.areItemsLoaded('busUnits') && !forceRefresh) {
busUnits = self._getAllLocal(entityName, orderBy, predicate);
return self.$q.when(busUnits);
}
return eq.from('BusUnits')
.expand('BusUnitDimensions')
.where(predicate)
.orderBy(orderBy)
.using(self.em).execute()
.to$q(succeeded, self._failed);
function succeeded(data) {
busUnits = data.results;
self.zStorage.areItemsLoaded('busUnits', true);
self.zStorage.save();
//self.logSuccess('Retrieved ' + busUnits.length + ' business units from server', busUnits.length, true);
return busUnits;
}
}
我從約翰的課程示例中脫離出來,我在函數中使用擴展來獲得商業單位來自服務器,我的假設是,這與微風每次刷新頁面(而不是清除緩存)都會進入服務器這一事實有關,而且這也與錯誤i'如果我導航離開然後回到頁面,則會收到。
任何人都可以提供和建議嗎?
我不太明白你在問什麼,但考慮到你在這個話題上提出了很多問題,並給予了熱烈的支持,因爲我建議你看看維持微風的公司提供的支持。你已經進入了高度自定義場景的境界,這些場景很難像我這樣的普通人。 –
我明白你的意思,但我的觀點是,這個話題會對很多SO用戶感興趣,在這裏發佈問題將爲那些有類似需求的人提供價值。雖然這個要求可能是一個共同的線索,但這些問題都與滿足要求的不同方面有關。 – zpydee
但我仍然不知道你在談論什麼共同的線程,要求或其他任何東西。 –