2012-11-21 11 views
5

最近requirejsで作業を始めました。単純なビューモデルを作成しようとすると、私は奇妙な例外が発生します。例外はknockout-2.1.0.jsファイルからのもので、例外は「購読可能なものだけが依存関係として動作する」ことです。あなたがのviewmodelを見ることができるようにノックアウトviewmodelとrequirejs

define("PageViewModel", ["knockout-2.1.0"], function(ko) { 
    return function PageViewModel() { 
     var self = this; 
     self.visiblePage = ko.observable("StartPage"); 
     self.showPage = function (pageName) { 
      self.visiblePage(pageName); 
     }; 
    }; 
}); 

はめちゃめちゃ簡単で、エラーがノックアウトのjsファイルであるため、requirejsはそれが必要として働いているように、それはそうです。私は見ている:http://knockoutjs.com/documentation/amd-loading.html 行に来るとき例外が発生します:self.visiblePage = ko.observable( "StartPage");

私が間違っていることに関するアイデアはありますか?

おかげで、 ルートヴィヒ

更新:

define("ViewModelFactory", ["StorageService", "PageViewModel", "AddUnitViewModel", "AddRoomViewModel"], 
function (StorageService, PageViewModel, AddUnitViewModel, AddRoomViewModel) { 
    //var repositoryStorage = new StorageService(); 
    var createAddRoomVM = function() { 
     var vm = new AddRoomViewModel(); 
     vm.setRepository = StorageService.getRoomRepository(); 
     return vm; 
    }; 
    var createAddUnitVM = function() { 
     var vm = new AddUnitViewModel(); 
     vm.setRepository = StorageService.getUnitRepository(); 
     return vm; 
    }; 
    var createPageVM = function() { 
     var vm = new PageViewModel(); 
     return vm; 
    }; 

    return { 
     createPageVM:createPageVM, 
     createAddRoomVM: createAddRoomVM, 
     createAddUnitVM: createAddUnitVM 
    }; 
}); 

や工場

define("ApplicationViewModel", ["ViewModelFactory"], 
function (viewModelFactory) { 
    mainVM = null; 
    var initVM = function() { 
     mainVM = { 
      page: viewModelFactory.createPageVM(), 
      addRoom: viewModelFactory.createAddRoomVM(), 
      addUnit: viewModelFactory.createAddUnitVM() 
     }; 
    }; 

    var getVM = function (viewName) { 
     switch (viewName) { 
      case "AddRoom": 
       return mainVM.addRoom; 
      case "AddUnit": 
       return mainVM.addUnit; 
      default: 
       return null; 
     } 
    }; 
    var getPageVM = function() { 
     return mainVM.page; 
    }; 

    return { 
     initVM: initVM, 
     getVM: getVM, 
     getPageVM: getPageVM, 
     mainVM: mainVM 
    }; 
}); 

そしてapplicationViewModelを含むクラスを呼び出すモジュール: これはpageviewmodelを含むモジュールです。

define("Bootstrapper", ["knockout-2.1.0", "Routing", "ApplicationViewModel"], 
function (ko, routing, applicationViewModel) { 
    var run = function() { 
     applicationViewModel.initVM(); <-- after here mainVM.page is null 
     var mainVM = applicationViewModel.mainVM; 
     routing.initRouting(applicationViewModel); 
     ko.applyBindings(mainVM); 
     routing.showView("StartPage"); 
     alert("Start"); 
    }; 

    return { 
     run: run 
    }; 
}) 
+0

'PageViewModel'とあなたのビューコードを使用する場所にコードを投稿することはできますか?ソースコードに従った – nemesv

+0

、行956で、プロパティがサブスクライブ可能でない場合に例外が発生します。 – Ray

+0

プロパティは、私が想定している通常の変数のように購読可能である必要があります... – user1842278

答えて

1

あなたの問題がkoがグローバル変数ではなかったとき、うまくいかなかった、ノックアウト2.1によって引き起こされた可能性があります。

ノックアウト2.2は正常に動作するはずです。これは実際にこの問題を修正したものです。

関連する問題