var utilityConditionalRequired = { viewModelSubscriptionField : {}, modelMap : [], koModelName : "appViewModel", init : function(fieldToSubscribe, modelMapInit, customModelName) { utilityConditionalRequired.viewModelSubscriptionField = fieldToSubscribe; utilityConditionalRequired.modelMap = modelMapInit; if (customModelName != null) { utilityConditionalRequired.koModelName = customModelName; } fieldToSubscribe.subscribe(function(change) { utilityConditionalRequired.onChangeVal(change); }) // Gestione primo caricamento utilityConditionalRequired.onChangeVal(fieldToSubscribe()); }, onChangeVal : function(change) { var chosenDiv = []; var notChosenDiv = []; for (var i = 0; i < utilityConditionalRequired.modelMap.map.length; i++) { var item = utilityConditionalRequired.modelMap.map[i]; if (item.key == change) { chosenDiv.push(item.value); } else { notChosenDiv.push(item.value); } } utilityConditionalRequired.removeRequiredFromDivInput(notChosenDiv); utilityConditionalRequired.addRequiredToDivInput(chosenDiv); }, removeRequiredFromDivInput : function(divArray) { for (var i = 0; i < divArray.length; i++) { var div = divArray[i]; $("#" + div).hide(); $('#' + div + ' input[data-bind][data-message]').each(function() { var koProperty = $(this).attr("name"); var propertyModel = eval(utilityConditionalRequired.koModelName + "." + koProperty); if (propertyModel.rules != null) { eval(utilityConditionalRequired.koModelName + "." + koProperty).rules.remove(function(item) { return item.rule == "required"; }); } }); } }, addRequiredToDivInput : function(divArray) { for (var i = 0; i < divArray.length; i++) { var div = divArray[i]; $("#" + div).show(); $('#' + div + ' input[data-bind][data-message]').each( function() { var koProperty = $(this).attr("name"); var fieldId = $(this).attr("id"); if (fieldId == null) { fieldId = ""; console.log("id del campo non definito"); } var message = htmlEscapeUtility.escapeHtml($(this).attr("data-message")); var propertyModel = eval(utilityConditionalRequired.koModelName + "." + koProperty); if(message) { propertyModel.extend({ "required" : { "message" : "" + message + "" } }); } }); $('#' + div + ' select[data-bind][data-message]').each( function() { var koProperty = $(this).attr("name"); var fieldId = $(this).attr("id"); if (fieldId == null) { fieldId = ""; console.log("id del campo non definito"); } var message = htmlEscapeUtility.escapeHtml($(this).attr("data-message")); var propertyModel = eval(utilityConditionalRequired.koModelName + "." + koProperty); if(message) { propertyModel.extend({ "required" : { "message" : "" + message + "" } }); } }); } } }