在我的应用程序中,我有一个全球玩家。在shell模块中,我需要播放器的viewmodel,因为我想知道播放器是否正在播放,如果是,我将一个类添加到app的容器中(在shell中)。
问题在于我还需要从播放器VM中获取shell,因为我在应用程序中使用了一些shell中的函数。
但是当从shell中要求播放器模块时,要求播放器中的shell返回undefined
。如果我不需要播放器,则shell会正常通过。
shell.js
define(['viewmodels/player'], function(player) {
return {
player: player
}
})
player.js
define(['viewmodels/shell'], function(shell) {
console.log('shell:', shell) // undefined
})
我不知道发生了什么。
答案 0 :(得分:0)
嗯! 我想我曾经遇到过这个问题。它们发生的方式是需要检查shell需要什么。然后它看到播放器模块并去修复它,在里面你需要shell。循环参考。我们确实解决了它。
我们确实喜欢这样,我正在编写伪代码,但你应该可以试试这个。
有很多方法,这是一种简单的方法。打开你的播放器并做这样的事。
var shell = require('shell'); //using this style to work around circular reference
答案 1 :(得分:0)
我会尝试帮助一些实施方案!</ p>
1°!播放器可以是服务(单件),并且在bouth视图模式中是必需的,
// app/services/player.js
require([], function(){/*Player*/});
// shell
require(['services/player'], function(player){/* SHEll */});
// ohter view
require(['services/player'], function(player){/* other view*/});
2º您可以使用发布/订阅模式!杜兰达尔对此有所支持!
// Alert that play has been clicked
app.trigger('player:play');
// subscribe play
app.on('player:play', doSomething);
// deactivate subscription
app.off('player:play', doSomething);
展位工作很好,低耦合......