Durandal.js单身人士没有返回正确的实例

时间:2015-06-03 18:20:08

标签: javascript durandal

我有一个名为'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,因为我点击了播放按钮并且它更改为暂停按钮(我正在控制播放/暂停按钮的可见性这个属性的全球玩家)。我尝试了很多方法来知道玩家是否暂停,但他们都给了我错误的价值。我做错了什么?

2 个答案:

答案 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',它给了我正确的实例。