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
};
})
Können Sie Ihren Code auch dort veröffentlichen, wo Sie Ihr 'PageViewModel' und vielleicht auch Ihren Viewcode verwenden? – nemesv
nach Ko-Quellcode in Zeile 956 tritt diese Ausnahme auf, wenn die Eigenschaft nicht beschreibbar ist. – Ray
Die Eigenschaft sollte abonnierbar sein, da es nur eine reguläre Variable ist, nehme ich an ... – user1842278