2016-10-14 7 views
0

Мое веб-приложение построено с использованием Ember.JS и Firebase для хранения данных. Он также служит для поддержки мобильного приложения. Пользователи могут использовать мобильное приложение для отправки «справки-запроса» - приложение манипулирует непосредственно с записями Firebase. Когда изменение сделано, администратор веб-приложения может увидеть уведомление на экране. Это прекрасно работает. Теперь я хочу добавить звук к этому уведомлению.Ember database новое событие записи и наблюдатель

Моя общая идея - решить проблему, чтобы добавить наблюдателя, который будет запущен, когда в базу данных будет добавлена ​​новая запись типа запроса справки.

Я нашел 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') 
}); 

Мой Второй подход: Сотворил - никогда не вызывается при внесении изменений в Firebase непосредственно.

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'); 

должен быть

this.set('shouldPlay',false); 

Это, как он, наконец, работал.

+0

Вы проверяли крючки на Ember модели, как [didLoad] (http://emberjs.com/api/data/classes/DS.Model.html)? – Keo

+0

Пока вы не сказали мне тоже. Оно работает! Можете ли вы представить его в качестве ответа? –

ответ

1

Когда firebase добавляет новую запись в магазин, она фактически загружена не созданной. Таким образом, вы можете использовать крючок didLoad на ember model. Я также предлагаю создать сервис для воспроизведения звуков. Это облегчит движение по дороге.

// 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'); 
    } 
    }, 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^