2012-11-21 22 views
5

मैंने हाल ही में requjs के साथ काम करना शुरू कर दिया है और जब मैं एक साधारण व्यूमोडेल बनाने की कोशिश करता हूं तो मुझे एक अजीब अपवाद मिलता है। अपवाद नॉकआउट-2.1.0.जेएस फ़ाइल से आता है और अपवाद है "केवल सदस्यता लेने योग्य चीजें निर्भरता के रूप में कार्य कर सकती हैं"।नॉकआउट व्यूमोडेल और requjs

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

आप viewmodel देख सकते हैं extremly आसान है और के बाद से त्रुटि नॉकआउट 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

क्या आप अपना कोड भी पोस्ट कर सकते हैं जहां आप अपना 'पेज व्यू मॉडेल' और शायद आपका व्यू कोड भी इस्तेमाल करते हैं? – nemesv

+0

कोओ स्रोत कोड के अनुसार, लाइन 956 में, यह अपवाद होता है जब संपत्ति विश्वसनीय नहीं होती है। – Ray

+0

संपत्ति सब्सक्राइब करने योग्य होनी चाहिए क्योंकि यह केवल एक नियमित चर है मुझे लगता है ... – user1842278

उत्तर

1

आपकी समस्या नॉकआउट 2.1 के कारण हुई हो सकती है, जो वैश्विक चर नहीं होने पर अच्छी तरह से काम नहीं करता था।

नॉकआउट 2.2 ठीक काम करना चाहिए, और मैं आपकी टिप्पणी से देखता हूं कि यह वास्तव में समस्या को ठीक करता है।