我有一個名爲'player'的模塊,它控制着我的應用程序的全局播放器。從另一個模塊中,我想知道玩家是否在玩東西。在播放器模塊內部,我有一個可觀察的事件來返回播放器的當前狀態。我寫了兩個函數來檢查播放器是否以不同的方式播放,但兩者總是從我的另一個視圖模型返回false。Durandal.js單身人士不返回正確的實例
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
,因爲我點擊了播放按鈕,並且它變成了暫停按鈕(我通過此屬性來控制全局玩家的播放/暫停按鈕的可見性) 。我嘗試了很多方法來知道玩家是否暫停,但他們都會給我返回錯誤的值。我究竟做錯了什麼?
這句話讓我感到困惑:「我有一個叫'player'的模塊,它控制着我的app的全局播放器。」這個全局玩家是否在你的代碼中的其他地方實例化了?因爲,是的,你確定'var player = new Audio()'在你的模塊內引用同一個實例嗎? – Brett
玩家視圖由shell.html組成。我並不擔心播放器變量,但我需要從其他模塊訪問播放器的觀察值 –
您在哪裏更改observable isPlaying中的值?它看起來像你初始化它爲false然後輸出到控制檯日誌的值。你在哪裏設定它爲真?你有一個事件監聽器嗎? –