primitive dependency resolving while instanciating plugins viewmodels
This commit is contained in:
parent
f6a3cf9821
commit
7e8491804f
5 changed files with 53 additions and 36 deletions
|
|
@ -258,7 +258,7 @@ $(function() {
|
|||
|
||||
|
||||
// view model class, identifier, parameters for constructor, container to bind to
|
||||
ADDITIONAL_VIEWMODELS.push([LaserCutterProfilesViewModel, "laserCutterProfilesViewModel",
|
||||
ADDITIONAL_VIEWMODELS.push([LaserCutterProfilesViewModel,
|
||||
["workingAreaViewModel", "controlViewModel", "vectorConversionViewModel"],
|
||||
document.getElementById("laserCutterProfiles")]);
|
||||
|
||||
|
|
|
|||
|
|
@ -297,7 +297,7 @@ $(function(){
|
|||
|
||||
}
|
||||
|
||||
ADDITIONAL_VIEWMODELS.push([VectorConversionViewModel, "vectorConversionViewModel",
|
||||
ADDITIONAL_VIEWMODELS.push([VectorConversionViewModel,
|
||||
["loginStateViewModel", "settingsViewModel", "printerStateViewModel", "workingAreaViewModel", "gcodeFilesViewModel"],
|
||||
document.getElementById("dialog_vector_graphics_conversion")]);
|
||||
|
||||
|
|
|
|||
|
|
@ -9,20 +9,11 @@ $(function(){
|
|||
self.settings = params[1];
|
||||
self.state = params[2];
|
||||
self.files = params[3];
|
||||
self.conversion = params[4];
|
||||
|
||||
self.log = [];
|
||||
|
||||
self.command = ko.observable(undefined);
|
||||
|
||||
// self.isErrorOrClosed = ko.observable(undefined);
|
||||
// self.isOperational = ko.observable(undefined);
|
||||
// self.isPrinting = ko.observable(undefined);
|
||||
// self.isPaused = ko.observable(undefined);
|
||||
// self.isError = ko.observable(undefined);
|
||||
// self.isReady = ko.observable(undefined);
|
||||
// self.isLoading = ko.observable(undefined);
|
||||
|
||||
self.availableHeight = ko.observable(undefined);
|
||||
self.availableWidth = ko.observable(undefined);
|
||||
self.px2mm_factor = 1; // initial value
|
||||
|
|
@ -380,7 +371,7 @@ $(function(){
|
|||
GCODE.workingArea = self; // Temporary hack to use the gcode parser from the gCodeViewer
|
||||
self.state.workingArea = self;
|
||||
self.files.workingArea = self;
|
||||
self.conversion.workingArea = self;
|
||||
|
||||
$(window).resize(function(){
|
||||
self.trigger_resize();
|
||||
});
|
||||
|
|
@ -391,8 +382,8 @@ $(function(){
|
|||
|
||||
|
||||
// view model class, parameters for constructor, container to bind to
|
||||
ADDITIONAL_VIEWMODELS.push([WorkingAreaViewModel, "workingAreaViewModel",
|
||||
["loginStateViewModel", "settingsViewModel", "printerStateViewModel", "gcodeFilesViewModel", "vectorConversionViewModel"],
|
||||
ADDITIONAL_VIEWMODELS.push([WorkingAreaViewModel,
|
||||
["loginStateViewModel", "settingsViewModel", "printerStateViewModel", "gcodeFilesViewModel"],
|
||||
[document.getElementById("area_preview"), document.getElementById("working_area_files")]]);
|
||||
|
||||
});
|
||||
|
|
@ -71,7 +71,7 @@ $(function() {
|
|||
var terminalViewModel = new TerminalViewModel(loginStateViewModel, settingsViewModel);
|
||||
|
||||
var slicingViewModel = new SlicingViewModel(loginStateViewModel, printerProfilesViewModel);
|
||||
var gcodeFilesViewModel = new GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicingViewModel, null, null);
|
||||
var gcodeFilesViewModel = new GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicingViewModel);
|
||||
var controlViewModel = new ControlViewModel(loginStateViewModel, settingsViewModel, printerStateViewModel);
|
||||
var navigationViewModel = new NavigationViewModel(loginStateViewModel, appearanceViewModel, settingsViewModel, usersViewModel);
|
||||
var logViewModel = new LogViewModel(loginStateViewModel);
|
||||
|
|
@ -96,32 +96,58 @@ $(function() {
|
|||
slicingViewModel: slicingViewModel,
|
||||
};
|
||||
|
||||
var allViewModels = _.values(viewModelMap);
|
||||
|
||||
var additionalViewModels = [];
|
||||
_.each(ADDITIONAL_VIEWMODELS, function(viewModel) {
|
||||
var viewModelClass = viewModel[0];
|
||||
var viewModelId = viewModel[1];
|
||||
var viewModelParameters = viewModel[2];
|
||||
var viewModelBindTarget = viewModel[3];
|
||||
var _createViewModelInstance = function(viewModel, viewModelMap){
|
||||
var viewModelClass = viewModel[0];
|
||||
var viewModelParameters = viewModel[1];
|
||||
|
||||
var constructorParameters = [];
|
||||
_.each(viewModelParameters, function(parameter) {
|
||||
for (var idx = 0; idx < viewModelParameters.length; idx++) {
|
||||
var parameter = viewModelParameters[idx];
|
||||
|
||||
if (_.has(viewModelMap, parameter)) {
|
||||
constructorParameters.push(viewModelMap[parameter]);
|
||||
} else {
|
||||
constructorParameters.push(undefined);
|
||||
}
|
||||
});
|
||||
|
||||
var viewModelInstance = new viewModelClass(constructorParameters);
|
||||
additionalViewModels.push([viewModelInstance, viewModelBindTarget]);
|
||||
allViewModels.push(viewModelInstance);
|
||||
viewModelMap[viewModelId] = viewModelInstance;
|
||||
});
|
||||
console.warn("postponing", viewModel[0].name, 'missing param: ', parameter);
|
||||
return;
|
||||
}
|
||||
}
|
||||
var viewModelInstance = new viewModelClass(constructorParameters);
|
||||
return viewModelInstance;
|
||||
};
|
||||
|
||||
var _getViewModelId = function(viewModel){
|
||||
var name = viewModel[0].name;
|
||||
return name.substr(0, 1).toLowerCase() + name.substr(1);
|
||||
};
|
||||
|
||||
var vmtmp = ADDITIONAL_VIEWMODELS.slice();
|
||||
var additionalViewModels = [];
|
||||
var attempt = 0;
|
||||
while(vmtmp.length > 0 && attempt < 3){
|
||||
while(vmtmp.length > 0){
|
||||
var viewModel = vmtmp.shift();
|
||||
var viewModelInstance = _createViewModelInstance(viewModel, viewModelMap);
|
||||
if(viewModelInstance !== undefined){
|
||||
var viewModelBindTarget = viewModel[2];
|
||||
var viewModelId = _getViewModelId(viewModel);
|
||||
if(viewModelMap[viewModelId] !== undefined){
|
||||
console.error("Duplicate class name while instantiating viewModel ", viewModelId);
|
||||
} else {
|
||||
additionalViewModels.push([viewModelInstance, viewModelBindTarget]);
|
||||
viewModelMap[viewModelId] = viewModelInstance;
|
||||
}
|
||||
} else {
|
||||
vmtmp.push(viewModel);
|
||||
}
|
||||
}
|
||||
attempt++;
|
||||
}
|
||||
|
||||
|
||||
var allViewModels = _.values(viewModelMap);
|
||||
var dataUpdater = new DataUpdater(allViewModels);
|
||||
|
||||
|
||||
//~~ Temperature
|
||||
|
||||
$('#tabs a[data-toggle="tab"]').on('shown', function (e) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
function GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicingViewModel, vectorConversionViewModel, workingAreaViewModel) {
|
||||
function GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicingViewModel) {
|
||||
var self = this;
|
||||
|
||||
self.printerState = printerStateViewModel;
|
||||
self.loginState = loginStateViewModel;
|
||||
self.slicing = slicingViewModel;
|
||||
//self.conversion = vectorConversionViewModel;
|
||||
self.workingArea = workingAreaViewModel;
|
||||
self.conversion = undefined;
|
||||
self.workingArea = undefined;
|
||||
|
||||
self.isErrorOrClosed = ko.observable(undefined);
|
||||
self.isOperational = ko.observable(undefined);
|
||||
|
|
|
|||
Loading…
Reference in a new issue