У меня есть один модуль под названием «плеер», который управляет глобальным игроком моего приложения. Из другого модуля я хотел бы знать, играет ли игрок что-то. Внутри модуля плеера у меня есть наблюдаемое, которое возвращает текущий статус игрока. Я пишу обе функции, которые проверяют, проигрывает ли плеер по-разному, но оба всегда возвращают false из моей другой модели.Durandal.js singleton не возвращает правильный экземпляр
player.js
define(['knockout', 'durandal/app'], function(ko, app) {
....
var player = new Audio(),
isPlaying = ko.observable(false),
songIsPlaying = function() { return !player.paused }
return {
isPlaying: isPlaying,
songIsPlaying: songIsPlaying
}
})
home.js
define(['knockout', 'durandal/app', 'player'], function(ko, app, player) {
function vm() {
var self = this
.....
self.playOtherPlayer = function() {
// this function plays another player, and I want to pause the global player if it's playing.
console.log("global player is playing?")
console.log(player.isPlaying())
console.log(player.songIsPlaying())
}
return vm
}
})
В обоих console.log
внутри self.playOtherPlayer()
, он возвращает мне false
. Я уверен, что свойство isPlaying()
от модуля плеера true
, потому что я нажал кнопку воспроизведения, и он изменился на кнопку паузы (я контролирую видимость кнопок воспроизведения/паузы глобального игрока по этому свойству) , Я пробовал так много способов узнать, приостановлен ли плеер, но все они возвращают мне неправильное значение. Что я делаю не так?
Это заявление смущает меня: «У меня есть один модуль под названием« игрок », который управляет глобальным игроком моего приложения». Создан ли этот глобальный игрок где-то еще в вашем коде? Потому что, так, вы уверены, что 'var player = new Audio()' внутри вашего модуля ссылается на один и тот же экземпляр? – Brett
Вид игрока составлен на shell.html. Я не очень беспокоюсь о переменной игрока, но мне нужно получить доступ к наблюдаемым данным игрока из других модулей. –
Где вы меняете значение внутри наблюдаемого isPlaying? Похоже, вы инициализируете его как false, а затем выводите значение в консольный журнал. Где вы установили его как истину? У вас есть слушатель событий где-то? –