2012-11-21 18 views
5

Ich habe vor kurzem begonnen, mit requirejs zu arbeiten, und wenn ich versuche, ein einfaches Viewmodel zu erstellen, bekomme ich eine seltsame Ausnahme. Die Ausnahme kommt aus der Datei knockout-2.1.0.js und die Ausnahme ist "Nur abonnierbare Dinge können als Abhängigkeiten fungieren".knockout viewmodel und 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); 
     }; 
    }; 
}); 

Wie Sie das Ansichtsmodell sehen kann, ist extrem einfach und da der Fehler in der Datei js Knockout ist, wie es scheint, requirejs funktioniert, wie es sollte. Ich habe geguckt: http://knockoutjs.com/documentation/amd-loading.html Die Ausnahme tritt auf, wenn Sie zu der Zeile kommen: self.visiblePage = ko.observable ("StartPage");

Irgendwelche Ideen, was ich falsch mache?

Danke, Ludwig

Update: Dies ist das Modul die pageviewmodel enthält:

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 
    }; 
}); 

Und das Modul Aufruf der Fabrik

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 
    }; 
}); 

und die Klasse mit dem applicationViewModel:

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

Können Sie Ihren Code auch dort veröffentlichen, wo Sie Ihr 'PageViewModel' und vielleicht auch Ihren Viewcode verwenden? – nemesv

+0

nach Ko-Quellcode in Zeile 956 tritt diese Ausnahme auf, wenn die Eigenschaft nicht beschreibbar ist. – Ray

+0

Die Eigenschaft sollte abonnierbar sein, da es nur eine reguläre Variable ist, nehme ich an ... – user1842278

Antwort

1

Ihr Problem könnte durch Knockout 2.1 verursacht worden sein, das nicht gut funktionierte, wenn ko keine globale Variable war.

Knockout 2.2 sollte gut funktionieren, und ich sehe von Ihrem Kommentar dies tatsächlich behoben das Problem.

Verwandte Themen