2016-10-14 5 views
0

내 웹 앱은 Ember.JS 및 Firebase를 사용하여 데이터를 저장합니다. 또한 모바일 앱의 백엔드 역할을합니다. 사용자는 모바일 앱을 사용하여 '도움 요청'을 보낼 수 있습니다. 앱은 Firebase 레코드로 직접 조작합니다. 웹 애플 리케이션의 관리자가 변경되면 화면의 알림을 볼 수 있습니다. 그건 잘 작동합니다. 이제이 알림에 소리를 추가하고 싶습니다.Ember 데이터베이스 새 레코드 이벤트 및 옵저버

필자는 헬프 요청 유형의 새로운 레코드가 데이터베이스에 추가 될 때 트리거 될 옵저버를 추가하기 위해이 문제를 해결하려고 일반적인 생각을했습니다.

내가 어떻게하는지 설명하는 종류의 post을 발견했지만 ArrayControler와 같은 사용되지 않는 메소드를 사용하고 있습니다.

레코드의 속성이 수정 될 때 트리거되는 도우미 요청 모델에 간단한 관찰자를 추가했습니다. 그건 잘 작동하지만 실제 솔루션보다는 해킹 것 같습니다.

큰 질문은 다음과 같습니다. 1. 새로운 레코드가 Firebase에서 생성되었는지 확인하기 위해 구독 할 수있는 콜백, 이벤트 또는 알림이 있습니까? 그렇다면 어떻게 구독하나요?

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    device: DS.attr('string'), 
    userName: DS.attr('string'), 
    locationName: DS.attr('string'), 
    type: DS.attr('string'), 
    fullNameChanged: function() { 

     // deal with the change 
     console.log("FULL NAME"); 
    }.observes('device').on('init') 
}); 

제 2의 접근 방식

: 만들기나요 - 변경이 직접 중포 기지로 만들 때 호출되지 않습니다.

didCreate:function(){ 
    console.log("Created"); 
    var mySound = soundManager.createSound({ 
    url: 'assets/beep22.mp3' 
    }); 
    mySound.play(); 
}, 

갱신나요 -라고하지만 속성은

didUpdate:function(){ 
    console.log("Updated"); 
    console.log((this.get('shouldPlay'))); 
} 

나요로드

유지되지 않습니다 - 가장 좋은 방법이 될 듯하지만, 변경 사항이 유지되지 않습니다 :(

didLoad:function(){ 
    console.log("Did load"); 
    if(this.get('shouldPlay')){ 
    var mySound = soundManager.createSound({ 
    url: 'assets/beep22.mp3' 
    }); 
    mySound.play(); 
    this.set('shouldPlay','false'); 
    this.save().then(() => { 
     console.log("saved"); 
    },(error)=>{ 
     console.log(error); 
    }); 

} 

}

업데이트 :

이가 드디어 일을 어떻게

this.set('shouldPlay',false); 

해야한다.

+0

[didLoad] (http://emberjs.com/api/data/classes/DS.Model.html)와 같은 엠버 모델에서 후크를 확인 했습니까? – Keo

+0

나 한테도 말하지 않을 때까지. 그것은 작동합니다! 대답으로 제출할 수 있습니까? –

답변

1

firebase이 저장소에 새로운 레코드를 추가하면 실제로로드되지 않습니다. 그래서 ember modeldidLoad 후크를 사용할 수 있습니다. 소리를 재생하는 서비스를 만드는 것이 좋습니다. 길을 쉽게 잡을 것입니다.

// models/help-request.js 
import DS from 'ember-data'; 
import Ember from 'ember'; 
const {inject: {service}} = Ember; 

export default DS.Model.extend({ 
    soundPlayer: service(), 

    didLoad() { 
    this._super(...arguments); 
    this.get('soundPlayer').newHelpRequest(this); 
    }, 
}); 

// services/sound-player.js 
import Ember from 'ember'; 

export default Ember.Service.extend({ 
    init() { 
    this._super(...arguments); 

    const beep = soundManager.createSound({ 
     url: 'assets/beep22.mp3', 
    }); 
    this.set('beep', beep); 
    } 

    play(sound) { 
    this.get(sound).play(); 
    }, 

    newHelpRequest(helpRequest) { 
    if (!helpRequest.get('_didNotify')) { 
     helpRequest.set('_didNotify', true); 
     this.play('beep'); 
    } 
    }, 
});