From 5a02c0c9402825d39a9d4d22f4acea018dbd691c Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Mon, 8 Dec 2014 11:13:43 -0800 Subject: [PATCH] addChild link working for things other than slivers --- .../core/xoslib/static/js/xoslib/xosHelper.js | 27 +++++++++++++-- .../core/xoslib/templates/xosAdmin.html | 33 ++++++++++--------- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js index 8e45267..b0e2dee 100644 --- a/planetstack/core/xoslib/static/js/xoslib/xosHelper.js +++ b/planetstack/core/xoslib/static/js/xoslib/xosHelper.js @@ -474,7 +474,8 @@ XOSDetailView = Marionette.ItemView.extend({ relatedListViewClassName = relatedName + "ListView"; assert(this.app[relatedListViewClassName] != undefined, relatedListViewClassName + " not found"); - relatedListViewClass = this.app[relatedListViewClassName].extend({collection: xos[relatedName].filterBy(relatedField,this.model.id)}); + relatedListViewClass = this.app[relatedListViewClassName].extend({collection: xos[relatedName].filterBy(relatedField,this.model.id), + parentModel: this.model}); this.app[regionName].show(new relatedListViewClass()); if (this.app.hideTabsByDefault) { this.app[regionName].$el.hide(); @@ -511,6 +512,7 @@ XOSDetailView = Marionette.ItemView.extend({ detailFields: this.model.detailFields, foreignFields: this.model.foreignFields, inputType: this.model.inputType, + model: this.model, }}, }); @@ -533,6 +535,7 @@ XOSItemView = Marionette.ItemView.extend({ detailFields: this.model.detailFields, foreignFields: this.model.foreignFields, inputType: this.model.inputType, + model: this.model, }}, }); @@ -547,6 +550,7 @@ XOSItemView = Marionette.ItemView.extend({ XOSListView = Marionette.CompositeView.extend({ childViewContainer: 'tbody', + parentModel: null, events: {"click button.btn-xos-add": "addClicked", "click button.btn-xos-refresh": "refreshClicked", @@ -587,8 +591,27 @@ XOSListView = Marionette.CompositeView.extend({ } }, + getAddChildHash: function() { + if (this.parentModel) { + // Find the field name in the model that should point to + // the parent object. For example, when adding a sliver, the + // fieldName that should point to 'users' is 'creator'. + parentFieldName = "unknown"; + for (fieldName in this.collection.foreignFields) { + cname = this.collection.foreignFields[fieldName]; + if (cname = this.collection.collectionName) { + parentFieldName = fieldName; + } + } + return "#addChild" + firstCharUpper(this.collection.modelName) + "/" + this.parentModel.modelName + "/" + parentFieldName + "/" + this.parentModel.id; // modelName, fieldName, id + } else { + return null; + } + }, + templateHelpers: function() { - return { title: this.title }; + return { title: this.title, + addChildHash: this.getAddChildHash() }; }, }); diff --git a/planetstack/core/xoslib/templates/xosAdmin.html b/planetstack/core/xoslib/templates/xosAdmin.html index 8957e03..8ca18db 100644 --- a/planetstack/core/xoslib/templates/xosAdmin.html +++ b/planetstack/core/xoslib/templates/xosAdmin.html @@ -89,7 +89,8 @@ @@ -185,7 +186,7 @@ - <%= xosListFooterTemplate() %> + <%= xosListFooterTemplate({addChildHash: addChildHash}) %> @@ -247,7 +248,7 @@ - <%= xosListFooterTemplate() %> + <%= xosListFooterTemplate({addChildHash: addChildHash}) %> @@ -354,7 +355,7 @@ - <%= xosListFooterTemplate() %> + <%= xosListFooterTemplate({addChildHash: addChildHash}) %> @@ -412,7 +413,7 @@ - <%= xosListFooterTemplate() %> + <%= xosListFooterTemplate({addChildHash: addChildHash}) %> @@ -574,7 +575,7 @@ - <%= xosListFooterTemplate() %> + <%= xosListFooterTemplate({addChildHash: addChildHash}) %> @@ -604,7 +605,7 @@ - <%= xosListFooterTemplate() %> + <%= xosListFooterTemplate({addChildHash: addChildHash}) %>