From 711551e34fd505ab28e08ca9cc6fe8fabe7a0f5d Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Thu, 5 Apr 2012 15:42:58 -0700 Subject: [PATCH] UI: detail view Support dynamically updating context on detail view load, to support cases where certain context items are required by other elements loaded, but may not be present in the browser history. --- ui/scripts/ui/widgets/detailView.js | 7 +++++ ui/tests/test.detailView.js | 49 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/ui/scripts/ui/widgets/detailView.js b/ui/scripts/ui/widgets/detailView.js index bfc67f61f66..acbd19ebf88 100644 --- a/ui/scripts/ui/widgets/detailView.js +++ b/ui/scripts/ui/widgets/detailView.js @@ -870,6 +870,13 @@ var removedTabs = []; var tabFilter = options.tabFilter; var context = options.context ? options.context : {}; + var updateContext = $detailView.data('view-args').updateContext; + + if (updateContext) { + $.extend($detailView.data('view-args').context, updateContext({ + context: $detailView.data('view-args').context + })); + } if(options.newData && ($detailView.data('view-args').section != null && context[$detailView.data('view-args').section] != null && context[$detailView.data('view-args').section].length > 0)) { diff --git a/ui/tests/test.detailView.js b/ui/tests/test.detailView.js index 1d098a34916..413e28dac20 100644 --- a/ui/tests/test.detailView.js +++ b/ui/tests/test.detailView.js @@ -743,4 +743,53 @@ }; $detailView.find('.action.updateDataTestAsync a').click(); }); + + test('Update context', function() { + var detailView = { + context: { + listViewItemA: [ + { fieldA: 'fieldAContent' } + ] + // listViewItemB [not stored yet] + }, + + tabFilter: function(args) { + start(); + ok($.isArray(args.context.listViewItemB), 'updateContext called before tabFilter'); + stop(); + + return []; + }, + + // updateContext is executed every time a data provider is called + updateContext: function(args) { + start(); + ok(true, 'updateContext called'); + equal(args.context.listViewItemA[0].fieldA, 'fieldAContent', 'updateContext: Item A present in context'); + stop(); + + return { + listViewItemB: [ + { fieldB: 'fieldBContent' } + ] + }; + }, + + tabs: { + test: { + title: 'test', + fields: { fieldA: { label: 'fieldA'}, fieldB: { label: 'fieldB' }}, + dataProvider: function(args) { + start(); + equal(args.context.listViewItemA[0].fieldA, 'fieldAContent', 'dataProvider: Item A present in context'); + equal(args.context.listViewItemB[0].fieldB, 'fieldBContent', 'dataProvider: Item B present in context'); + } + } + } + }; + var $detailView = $('
'); + + stop(); + $detailView.detailView(detailView); + }); }(jQuery));