Mvvm 敲除视图模型和requirejs
我最近开始使用requirejs,当我尝试创建一个简单的viewmodel时,我遇到了一个奇怪的异常。异常来自knockout-2.1.0.js文件,异常是“只有可订阅的东西才能充当依赖项” 正如您所看到的,viewmodel非常简单,而且由于错误出现在knockout js文件中,因此看起来requirejs工作正常。我一直在看: 到达该行时出现异常:self.visiblePage=ko.observable(“起始页”) 你知道我做错了什么吗 谢谢, 路德维希 更新: 这是包含pageviewmodel的模块:Mvvm 敲除视图模型和requirejs,mvvm,knockout.js,viewmodel,requirejs,Mvvm,Knockout.js,Viewmodel,Requirejs,我最近开始使用requirejs,当我尝试创建一个简单的viewmodel时,我遇到了一个奇怪的异常。异常来自knockout-2.1.0.js文件,异常是“只有可订阅的东西才能充当依赖项” 正如您所看到的,viewmodel非常简单,而且由于错误出现在knockout js文件中,因此看起来requirejs工作正常。我一直在看: 到达该行时出现异常:self.visiblePage=ko.observable(“起始页”) 你知道我做错了什么吗 谢谢, 路德维希 更新: 这是包含pagevi
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的类:
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
};
})
define(“Bootstrapper”、“knockout-2.1.0”、“Routing”、“ApplicationViewModel”],
功能(ko、路由、应用程序视图模型){
var run=函数(){
applicationViewModel.initVM();您的问题可能是由敲除2.1造成的,当ko不是全局变量时,敲除2.1不起作用
敲除2.2应该可以正常工作,我从您的评论中看到,这确实解决了问题。您是否也可以在使用PageViewModel
的地方发布代码,或者也可以发布视图代码?根据ko源代码,在第956行,当属性不可订阅时会发生异常。属性应该是可订阅的,因为它只是一个我想是常规变量…你使用的是缩小版还是调试版的敲除?我将敲除更新为2.2.0,然后改为调试,它突然开始工作了!
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
};
})