2014-02-05 3 views
0

최근에는 많은 관계를 관리하기위한 UI를 구현해야한다는 요구 사항이있었습니다. Ward Bell은 Angular 및 Breeze와 함께 1-m-1을 사용하여 구현하는 방법을 보여주는 this plunker을 친절하게 제공했습니다.Breeze 1-m-1 in HotTowel 각주 로컬 저장

내 응용 프로그램의 디자인은 주로 (특히 datacontext와 로컬 저장소) John Papa의 최근 Pluralsight 코스를 기반으로합니다. 나는 내 업데이트한다는 점에서, 서버에서 데이터를 가져 오기 위해 응용 프로그램을 강제로 때 워드의 예를 참조하여 내 앱 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; 
     }); 
    } 
function markDeleted(entity) { 
     return entity.entityAspect.setDeleted(); 
    } 

그리고 마지막으로이 사업을 얻을 수있는 저장소 코드는 다음과 같습니다이 삭제 된 항목을 표시 내 데이터 컨텍스트 코드가

function addBusUnitDimension(busUnit, dimension) { 
     var newBusUnitDimension = this.em.createEntity(busUnitDimension); 
     newBusUnitDimension.busUnitId = busUnit.id; 
     newBusUnitDimension.dimensionId = dimension.id; 
     return this.$q.when(newBusUnitDimension); 
    } 

입니다 : 14,이 새로운 busUnitDimension 엔티티를 추가 내 저장소의 코드는 유닛과 그 조인 테이블 엔티티 :

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; 
     } 
    } 

존의 코스 예제에서 출발 한 것은 내가 비즈니스를 얻는 데 사용하는 기능에서 확장을 사용하고 있다는 것입니다. 서버의 단위와 나의 가설은 이것이 캐시가 삭제되지 않고 페이지를 새로 고침 할 때마다 서버에가는 바람과 관련이 있다는 것입니다. 그리고 이것은 또한 오류와 관련이 있습니다. 내가 멀어 질 때 받는다. 그러면 그 페이지로 되돌아 간다.

누구든지 제안 할 수 있습니까?

+0

나는 당신이 무엇을 요구하고 있는지 이해하지 못했지만,이 주제에 대해 질문 한 많은 질문들과 압도적 인지지를 감안할 때 산들 바람을 유지하는 회사로부터 유료 지원을 들여다 볼 것을 제안합니다. 당신은 나처럼 일반 대중을 따르기가 어려운 고도로 맞춤화 된 시나리오의 영역으로 모험심을 가졌습니다. –

+0

나는 당신의 요지를 가지고 있지만, 나의 견해는이 주제는 많은 SO 사용자들에게 흥미가있을 것이며, 여기에 질문을 게시하면 비슷한 요구 사항을 가진 사람들에게 가치를 제공 할 것이라는 것이다. 요구 사항은 일반적인 스레드 일 수 있지만 질문은 모두 요구 사항을 충족시키는 여러 측면과 관련이 있습니다. – zpydee

+0

하지만 아직 어떤 공통 스레드, 요구 사항 또는 다른 것에 대해서도 알지 못합니다. –

답변

1

오래 전부터 고맙게 생각하고 계시거나 해결해 보셨을 것입니다. 그러나 최근에 같은 문제가 발생하여 해결해야 할 나이가 들었습니다. 내가 찾은 대답은 JP의 ​​angular.breeze.storagewip.js 파일을 편집해야한다는 것입니다. 파일에 하드 코딩 된 엔티티의 이름이 포함되어 있으며 엔티티와 일치하도록 엔티티 이름을 변경해야합니다....

function checkStoreImportVersionAndParseData(importedData) { 
     if (!importedData) { 
      return importedData; 
     } 
     try { 
      var data = JSON.parse(importedData); 
      var importMeta = data[0]; 
      if (importMeta.breezeVersion === storeMeta.breezeVersion && 
       importMeta.appVersion === storeMeta.appVersion) { 
       if (importMeta.isLoaded) { 
       storeMeta.isLoaded.assets = storeMeta.isLoaded.assets || importMeta.isLoaded.assets; 
       storeMeta.isLoaded.elements = storeMeta.isLoaded.elements || importMeta.isLoaded.elements; 
       storeMeta.isLoaded.surveyors = storeMeta.isLoaded.surveyors || importMeta.isLoaded.surveyors; 
       storeMeta.isLoaded.elementAssets = storeMeta.isLoaded.elementAssets || importMeta.isLoaded.elementAssets; 
       } 
       return data[1]; 
      } else { 
       _broadcast(storeConfig.events.error, 
        'Did not load from storage because mismatched versions', 
        { current: storeMeta, storage: importMeta }); 
      } 
     } catch (ex) { 
      _broadcast(storeConfig.events.error, 'Exception during load from storage: ' + ex.message, ex); 
     } 
     return null; // failed 
    } 

내가 이것을 해결

function zStorageCore($rootScope, zStorageConfig) { 
    var storeConfig = zStorageConfig.config; 
    var storeMeta = { 
     breezeVersion: breeze.version, 
     appVersion: storeConfig.version, 
     isLoaded: { 
      elementAssets : false, 
      surveyors : false, 
      elements : false, 
      assets : false 
     } 
    }; 

를 실행 한 다음, 당신이해야 할 두 가지 기능이 있습니다

는, 예를 아래에 내가 사용하고있는 네 개의 기관과 변화를 보여 JP의 스타일 가이드 코스 파일을 SPA/Angular/Breeze 코스와 비교합니다.