내 emberjs 응용 프로그램에 데이터베이스 데이터가없는 모델이 있습니다. 내가 서버에서 일부 요청을 풀링하지만 컨트롤러 또는 뷰에 바인딩되지 않은 일부 개체를 원하기 때문에이 모델을 만들었습니다. 같은Emberjs 모델 내 SetTimeout
뭔가 : StatusChecker
을 내 Application.create 내부 내가 이런 식으로 할 수는 :
Webapp = Ember.Application.create({
rootElement: '#content',
LOG_TRANSITIONS: true,
ready: function() {
return Webapp.status_helper = Webapp.StatusHelper.create({
timer: 15
});
}
});
이 응용 프로그램에 대한 고유해야합니다 Webapp.StatusHelper
개체를 인스턴스화합니다. 내가이 객체에 init
를 호출 할 때 나는 또한 기본 타이머를 사용하여 폴링을 시작합니다 $this.transitionToRoute('problem');
:
Webapp.StatusHelper = Ember.Object.extend({
init: function(params) {
this.timer = this.get("timer");
this.timeoutID = null;
this.controller = null;
this.start();
},
start: function() {
this.execute();
},
stop: function() {
clearTimeout(this.timeoutID);
},
setTimer: function(newTime) {
this.stop();
this.timer = newTime;
this.start();
},
execute: function() {
var $this = this;
this.stop();
$.get("/status").done(function(data) {
console.log(data);
if (data["status"] === 0) { // Continue trying
$this.timeoutID = setTimeout(function() {
$this.execute();
}, $this.timer * 1000);
} else if (data["status"] === 1) { // Go to a given controller
$this.setTimer(15);
$this.transitionToRoute('index'); // This doesn't work
} else {
$this.setTimer(15);
$this.transitionToRoute('problem'); // This doesn't work
}
});
}
});
첫 번째 문제는 내가이를 사용하여 모델에서 경로를 변경하지 못할 것입니다. 모델에서 그것을 할 수있는 방법이 있습니까?
두 번째 문제는 내가 컨트롤러에 들어가 때때로 때 내가 같이, 그 타이머를 중지하고 다른 간격을 시작해야 직후 StatusHelper
의 간격을 지정할 필요가있다 :
Webapp.IndexRoute = Ember.Route.extend
setupController: (controller) ->
Webapp.status_helper.setTimer 15
Webapp.ProblemRoute = Ember.Route.extend
setupController: (controller) ->
Webapp.status_helper.setTimer 1
매 초마다 문제가 해결되었는지 확인해야하고 색인 페이지가 필요할 때마다 문제 페이지로 전환해야하기 때문에 이런 일이 발생합니다. 전환 후 나는 2, 그리고 때로는 더 많은 간격을 얻는다.
어떻게 멈추고 작동시킬 수있는 기능을 하나만 만들 수 있습니까?
P .: 모델을 변경할 필요가있는 경우 다른 것으로 변경할 수 있습니다.
TL;
- DR 어떻게 내부 제어기로부터의 경로를 변경할 수 있는가?
- 어떻게 하나의 함수를 간격으로 실행할 수 있습니까?
- 다른 (더 나은) 방법이 있습니까? 내 라이브러리의
편집
버전 : '($ this.transitionToRoute :
DEBUG: Ember.VERSION : 1.0.0-rc.1 ember.js:348
DEBUG: Handlebars.VERSION : 1.0.0-rc.3 ember.js:348
DEBUG: jQuery.VERSION : 1.9.1
내 접근 방식 (컨트롤러로''Webapp.StatusHelper'')에 내 문제는 우리가 한 페이지 /보기를 렌더링하는 컨트롤러를 2 개 가질 수 없다는 것입니다. 전자 메일 페이지처럼 생각하면 2 페이지 (모든 전자 메일과 전자 메일)가 있습니다. 둘 다 나는 새 이메일을 확인하고 싶습니다. 하나는 5 초마다, 다른 하나는 25 초마다 필요합니다. 이것은 내가 원하는 것입니다. –
OK 당신이 원하는 것이 합리적입니다. 그러나'Webapp.StatusController'가 이것을 지원합니다. "2 개의 컨트롤러에서 한 페이지 /보기를 렌더링 할 수 없습니다"라는 의미는 무엇입니까? Ember 컨테이너는 'Webapp.StatusHelper' 인스턴스가 하나만 존재하는지 확인합니다. 그런 다음 당신의 경로 setupController hook은'controllerFor ('status'). start (5)'와 같은 것을 할 것이고 hook을 비활성화 시키면'controllerFor ('status'). stop()'을 가질 것이다. 코드를 사용하여 내 대답 업데이트 ... –
멋지게 일했습니다, 감사합니다 –