2013-08-08 2 views
2

내 응용 프로그램에는 nodes 풀과 여러 하위 노드 (queues, services, ...)가 있습니다. 계속 nodes 풀에 액세스해야하며 데이터가 백엔드의 최신 데이터인지 확인해야합니다. 백엔드의 데이터는, 예를 들어, 때문에 여러 가지 이유로 변경할 수 있습니다 : 다른 객체와 협력의인덱스의 강제로드

  1. 부작용 : 백엔드 영향을받는 객체,하지만 너무 관련 개체뿐만 아니라 수정합니다. 예를 들어 서비스 문서의 업데이트가 대기열에 영향을 줄 수 있습니다. 이것은 백엔드에서 이루어지며 엠버 어플리케이션은 이것을 인식하지 못합니다.
  2. 다른 사용자가 백엔드에서 개체를 수정했을 수 있으며 새로운 사본을 얻고 싶습니다. 경로 #/nodes/index에 접근하지만, 때로는 사용자가 올바른 경로에 대한 액세스를 수행 할 것으로 기대하지 않고, 가게의 새로 고침을 강제하고자 ​​할 때 일반적으로 개체가로드

. 이것을 어떻게 프로그래밍 방식으로 실행할 수 있습니까?

답변

2

엠버 데이터를 사용하여 데이터를 다시로드 할 수 있습니다. recordArray.update()을 입력하고 window.setInterval을 사용하여 원하는 시간을 예약하십시오. RecordArray 인스턴스는 Model.find()이 해석 될 때 get입니다.

Model.find().then(function(recordArray) { 
}); 

이 작업을 수행하는 쉬운 방법은 model 후크에 데이터를 반환하고, afterModel 후크에 recordArray 인스턴스를지고의 타다 남은 방법이다. 때마다 새로운 setInterval을 생성 할 수 있기 때문에

App.NodesIndexRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Nodes.find(); 
    }, 
    afterModel: function(recordArray) { 
    setInterval(function() { 
     recordArray.update(); 
    }, 1000); //each second 
    } 
}); 

그냥, 인덱스 루트 노드로의 전환과 인식, 사물은로드 : 그래서 예에 의해, setInverval를 사용하여 일부 특정 시간에 update을 수행하려면이 인스턴스를 사용 해당 경로로의 각 전환까지 n 배 더.

는이 문제를 해결 setInterval의 반환 ID를 저장하고, 이전 작업 제거 clearInterval를 사용하려면 내가 샘플 here을 만든

afterModel: function() { 
    if (this.get('jobId')) { 
     clearInterval(jobId); 
    } 
    var jobId = setInterval(function() { 
     record.update() 
    }, 1000); // each second 
    this.set('jobId', jobId); 
} 

합니다.

+0

감사합니다. 저는 이것을 애플리케이션에 구현할 예정입니다. 아직 명확하지 않은 점은'NodesIndexRoute'에 접근하지 않으면 어떻게해야합니까? 나는 여전히 응용 프로그램의 다른 부분에 대한 노드가 필요합니다. 어쩌면 나는 이것을 'ApplicationRoute'에서 트리거 할 필요가있다 ... – dangonfast

+0

이것은 레코드리스트가 보여지기 때문에 NodesIndexRoute을 샘플로 사용했다. 라우팅을 신경 쓰지 않고 시작하려면 어플리가 시작될 때 'ApplicationRoute'가 될 것입니다. –