From 6585fc91fd92036d01f85284a76d1193b6a7b338 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Mon, 15 Dec 2014 14:54:55 -0800 Subject: [PATCH] generic applyConstraints, before abandoning --- .../core/xoslib/static/js/xoslib/xosHelper.js | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js index ece2419..1141dcb 100644 --- a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js +++ b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js @@ -595,6 +595,34 @@ XOSDetailView = Marionette.ItemView.extend({ model: this.model, }}, + applyConstraints: function() { + for (constraint in this.model.constraints) { + // constraint syntax: "operator,destField.destSubField,srcField.srcSubField" + // i.e. equal,node.deployment,deploymentNetwork.id + parts = constraints.split(","); + operator = parts[0]; + parts1 = parts[1].split("."); + destField = parts1[0]; + destSubField = parts1[1]; + parts2 = parts[2].split("."); + srcField = parts2[0]; + srcID = this.$el.find(srcModel).val(); + if (operator == "equal"): + filterMaker = function makeFilter(destSubField,srcID) { return function(linkedObj) { return (linkedObj.attributes[destSubField] == srcID); } }; + filterFunc = filterMaker(destSubField, srcID); + else: + continue; + + newSelect = idToSelect(destField, + model.attributes[destField], + model.foreignFields[destField], + "humanReadableName", + false, + filterFunc); + + this.$el.find(destFieldName).html(newSelect); + }, + }); /* XOSItemView @@ -920,7 +948,7 @@ idToName = function(id, collectionName, fieldName) { fieldName = name of field within models of collection that will be displayed */ -idToOptions = function(selectedId, collectionName, fieldName) { +idToOptions = function(selectedId, collectionName, fieldName, filterFunc) { result="" for (index in xos[collectionName].models) { linkedObject = xos[collectionName].models[index]; @@ -931,6 +959,9 @@ idToOptions = function(selectedId, collectionName, fieldName) { } else { selected = ""; } + if ((filterFunc) && (!filterFunc(linkedObject)) { + continue; + } result = result + ''; } return result; @@ -944,14 +975,14 @@ idToOptions = function(selectedId, collectionName, fieldName) { fieldName = name of field within models of collection that will be displayed */ -idToSelect = function(variable, selectedId, collectionName, fieldName, readOnly) { +idToSelect = function(variable, selectedId, collectionName, fieldName, readOnly. filterFunc) { if (readOnly) { readOnly = " readonly"; } else { readOnly = ""; } result = ''; return result; } -- 2.43.0