我有一个名为'player'的模块,它控制着我应用的全局播放器。从另一个模块,我想知道玩家是否正在玩某些东西。在播放器模块内部,我有一个observable,它返回播放器的当前状态。我已经编写了两个函数来检查播放器是否以不同的方式播放,但是两个函数总是从我的另一个视图模型中返回false。
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
,因为我点击了播放按钮并且它更改为暂停按钮(我正在控制播放/暂停按钮的可见性这个属性的全球玩家)。我尝试了很多方法来知道玩家是否暂停,但他们都给了我错误的价值。我做错了什么?
答案 0 :(得分:0)
我不知道这会对你有用,但是尝试更改你的播放器模块以返回这样的单身:
代码段示例:
define([], function()
{
var viewModel = function()
{
......
};
return new viewModel();
});
根据您的代码提供的完整示例代码:
define(['knockout', 'durandal/app'], function(ko, app) {
var viewModel = function()
{
var self = this;
......
var player = new Audio();
self.isPlaying = ko.observable(false);
self.songIsPlaying = function() {
return ! player.paused;
}
};
return new viewModel();
});
答案 1 :(得分:0)
要获取viewmodel的正确实例,您需要使用它的moduleID。所以你不需要在main.js中定义文件。我只需要'viewmodels / player',它给了我正确的实例。