Durandal.js 单例未返回正确的实例
Durandal.js singleton not returning correct instance
我有一个名为 'player' 的模块,它控制我的应用程序的全局播放器。从另一个模块,我想知道玩家是否在玩什么。在播放器模块中,我有一个可观察到的 return 播放器的当前状态。我已经编写了两个函数来检查玩家是否以不同的方式玩游戏,但是从我的另一个视图模型来看,这两个函数总是 returns 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()
,return就是我false
。我确定播放器模块中的 属性 isPlaying()
是 true
,因为我点击了播放按钮,它变成了暂停按钮(我正在控制play/pause 全局播放器按钮 属性)。我尝试了很多方法来了解播放器是否暂停,但它们都 return 给我错误的值。我做错了什么?
我不知道这对你有用,但尝试将你的播放器模块更改为 return 像这样的单例:
片段代码示例:
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();
});
要获取视图模型的正确实例,您需要要求它的模块 ID。所以你不需要在main.js中定义文件。我只需要 'viewmodels/player',它给了我正确的实例。
我有一个名为 'player' 的模块,它控制我的应用程序的全局播放器。从另一个模块,我想知道玩家是否在玩什么。在播放器模块中,我有一个可观察到的 return 播放器的当前状态。我已经编写了两个函数来检查玩家是否以不同的方式玩游戏,但是从我的另一个视图模型来看,这两个函数总是 returns 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()
,return就是我false
。我确定播放器模块中的 属性 isPlaying()
是 true
,因为我点击了播放按钮,它变成了暂停按钮(我正在控制play/pause 全局播放器按钮 属性)。我尝试了很多方法来了解播放器是否暂停,但它们都 return 给我错误的值。我做错了什么?
我不知道这对你有用,但尝试将你的播放器模块更改为 return 像这样的单例:
片段代码示例:
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();
});
要获取视图模型的正确实例,您需要要求它的模块 ID。所以你不需要在main.js中定义文件。我只需要 'viewmodels/player',它给了我正确的实例。