diff --git a/public/index.html b/public/index.html
index b345f50..f6d2d50 100644
--- a/public/index.html
+++ b/public/index.html
@@ -402,7 +402,6 @@ function updateViewModelMain(app, viewModel, doc, vm_config) {
ko.mapping.fromJS(snapshot, vm_config.mapping, viewModel);
viewModel._newAttribute("");
debug && console.log('updated viewModel', viewModel);
- app.fn.main.setDoc(viewModel._chosenAttributeId());
mainViewModelUpdating = false;
app.fn.main.updateSelectedMode();
}
@@ -575,7 +574,6 @@ function loadConfig(app, location, viewModels, callback) {
initializeConfig(doc, app, viewModels, callback);
return doc.on('change', function handleConfigChange() {
debug && console.log('Config changed!!');
- app.state.running = false;
initializeConfig(doc, app, viewModels, callback);
});
});
@@ -587,14 +585,15 @@ var config_location = {
};
var app = {
state: {
- running: false
+ running: false,
+ vm: {bound : {}}
},
doc: {},
fn: {},
vm: {}
};
-function bindViewModels(app) {
+function initKnockout() {
/* http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html */
ko.bindingHandlers.stopBinding = {
init: function() {
@@ -602,27 +601,37 @@ function bindViewModels(app) {
}
};
ko.virtualElements.allowedBindings.stopBinding = true;
-
+}
+function bindViewModels(app) {
_.forEach(_.keys(app.vm), function (key) {
- var viewModel = app.vm[key];
- var viewModelConfig = app.config.snapshot.viewModel[key];
- var elementId = viewModelConfig.elementId;
- var element = document.getElementById(elementId);
- console.log('applyBindings',key,viewModel,viewModelConfig, elementId);
- ko.applyBindings(viewModel, element);
- })
-
+ if (key in app.state.vm.bound) {
+ debug && console.log('bindViewModels bindings already applied for', key);
+ } else {
+ var viewModel = app.vm[key];
+ var viewModelConfig = app.config.snapshot.viewModel[key];
+ var elementId = viewModelConfig.elementId;
+ var element = document.getElementById(elementId);
+ console.log('bindViewModels applyBindings',key,viewModel,viewModelConfig, elementId);
+ ko.applyBindings(viewModel, element);
+ app.state.vm.bound[key] = elementId;
+ }
+ });
+ console.log('Viewmodels bound', 'ok');
}
function configLoaded(err) {
if (err) {
console.error('Error loading config', err);
}
console.log(app, 'Loaded', err || 'ok');
+ console.log('app.state.running', app.state.running);
+
+ if (app.state.running == false) {
+ initKnockout();
+ }
bindViewModels(app);
- console.log('Viewmodels bound ok');
app.state.running = true;
}
-
+console.log('app.state.running', app.state.running);
loadConfig(app, config_location, app.vm, configLoaded);