kumarachi wrote:
> hi, David:
>
>
> The results for what i tried for what seemed like the right
> expressions to use were generally that the expression keeps evaluating
> to 'null':
>
> scripts/{{.label}}/{{value}}
>
> shows up in my rendered page as:
>
> scripts/null/DataSheet.doc, for example.
>   
Oh I see. That can be tricky since you have several items sharing the 
same .doc.

If each .doc belongs to only one item, then you could have used this 
expression

    scripts/{{!scriptURI.label}}/{{value}}

The !scriptURI part retrieves the item given a .doc. But since that's 
not the case--a .doc can belong to several items, then I'd try the 
following approach. First, extend Exhibit by defining a new control 
construct called "with" that you can used to define a variable, and a 
function called "last-segment":

    <script>
        Exhibit.Controls["with"] = {
            f: function(
                args,
                roots,
                rootValueTypes,
                defaultRootName,
                database
            ) {
                var valueCollection = args[0].evaluate(roots, 
rootValueTypes, defaultRootName, database);
                var nameCollection = args[1].evaluate(roots, 
rootValueTypes, defaultRootName, database);
               
                var name = null;
                nameCollection.forEachValue(function(v) {
                    if (v) {
                        name = v;
                        return true;
                    }
                });
               
                var oldValue = null
                var oldValueType = null
                if (name in roots) {
                    oldValue = roots[name];
                    oldValueType = rootValueTypes[name];
                }
       
                rootValueTypes[name] = valueCollection.valueType;
                roots[name] = valueCollection;
               
                var r = args[2].evaluate(roots, rootValueTypes, 
defaultRootName, database);
               
                if (oldValue != null) {
                    rootValueTypes[name] = oldValueType;
                    roots[name] = oldValue;
                } else {
                    delete rootValueTypes[name];
                    delete roots[name];
                }
               
                return r;
            }
        };

        
Exhibit.FunctionUtilities.registerSimpleMappingFunction("last-segment", 
function(v) {
            var slash = v.lastIndexOf("/");
            return v.substr(slash + 1);
        }, "text");
    </script>

Then your ul can be

    <ul ex:content="with(value, 'parent', foreach(.scriptURI, 
concat('script/', parent, '/', value)))">
       <li><a ex:href-content="value" 
ex:content="last-segment(value)"></a></li>
    </ul>

Let me know if that works. It's somewhat of a hack but the right 
solution would require deeper changes to Exhibit.

David


> It seems I am not using the correct expression for getting the label
> into my path.
>
> Here is the code - this is a section that is part of a Lens view:
>
> <div ex:role="exhibit-viewPanel" style="padding: 6px; color:white;"
> ex:viewClass="Exhibit.TabularView">
> ....
> ...
>                       <div ex:role="exhibit-lens" ex:formats="date
> { mode: short; show: date }" class="item" style="display:
> none;overflow:visible;width:100%">
> ....
>
>                                                         <div
> id="scriptsList" class="scriptsList">
>                                                               <p 
> class="section-title">Scripts:</p>
>                                                               <ul 
> ex:content=".scriptURI" id="scriptsList">
>                                                                       <li><a 
> ex:href-subcontent="scripts/{{.label}}/{{value}}"
> ex:content="value" class="lens-link"></a></li>
>  
> <!--other variations I tried: -->
>  
> <!-- li><a ex:href-subcontent="scripts/',.label,{{value}}"
> ex:content="value" class="lens-link"></a></li -->
>  
> <!-- li><a ex:href-content="concat('scripts/',#{{.label}},value)"
> ex:content="value" class="lens-link"></a></li -->
>                                                                       <!-- 
> li><a ex:href-content="concat('scripts/',.label,value)"
> ex:content="value" class="lens-link"></a></li -->
>
>
>                                                               </ul>
>                                                       </div>
>
>                        ...
>               </div>
>         ....
> </div >
>
>
> And this is the data:
> {
>       "items" :      [
>             {
>                       "type" :             "Item",
>                       "label" :            "PUMA",
>                       "scriptURI" :        [
>                               "DataSheet.doc",
>                               "KnownIssues.doc",
>                               "Demo script.doc",
>                               "Manifest.doc"
>                       ],
>                       "release-date" :     "2009-04-20T00:00:00-04:00"
>               },
>                 {
>                       "type" :             "Item",
>                       "label" :            "COUGAR",
>                       "scriptURI" :        [
>                               "FlowDiagram.doc",
>                               "KnownIssues.doc",
>                               "Architecture.doc",
>                               "CaseStudy.doc"
>                       ],
>                       "release-date" :     "2009-04-20T00:00:00-04:00"
>               },
>
> [etc....]
>
> ]
>
>
> So that in the end, i'd like the lens to render this for each item,
> dynamically:
>
> /scripts/PUMA/DataSheet.doc
> /scripts/PUMA/KnownIssues.doc
> /scripts/PUMA/Manifest.doc;
>
> and for label=COUGAR:
> /scripts/COUGAR/CaseStudy.doc
> /scripts/COUGAR/FlowDiagram.doc
>
> etc.
>
>
>
>
>
>
> John:
>
> the problem is that I dont know these label name values beforehand,
> even if I wanted to hardcode them in the function you provided.
>
>
> The URL to this exhibit is internal to my company, so I am sorry I
> cannot share that.
>
> I hope this is sufficient info, sorry I was unclear.
>
>
> best,
> -k
>
>
>
> On May 28, 7:40 am, David Huynh <[email protected]> wrote:
>   
>> Your mistakes can be somewhere else other than the code snippets that
>> you're showing us here. Could you either give a URL to your exhibit or
>> provide much more code so that it's easier for us to try to think what
>> might have gone wrong? Also, for whatever that you tried, what were the
>> results? Did everything break? Or did the links just not get formatted
>> correctly?...
>>
>> David
>>
>> kumarachi wrote:
>>     
>>> Hi,
>>>       
>>> now I need a little more help on this...hope there's a solution.
>>>       
>>> the Path to the object I need to link to is actually categorized
>>> according to the label.
>>>       
>>> so instead of
>>>       
>>> ex:href-subcontent="../scripts/{{value}}"
>>>       
>>> I need to be able to link to content that is in different folders,
>>>       
>>> scripts/<some-name>/{{value}},
>>>       
>>> where <some-name> changes according to the label on that item.
>>>       
>>> I have, with my limited understanding of expressions in Exhibit, tried
>>> various things like:
>>> scripts/{{label}}/{{value}}, scripts/{{.label}}/{{value}} and other
>>> variations - all in vain.
>>>       
>>> Can you help me?
>>>       
>>> thanks
>>> -k
>>>       
>>> On May 18, 6:58 pm, kumarachi <[email protected]> wrote:
>>>       
>>>> oh my god :-).
>>>> perfect, David, thanks so much - works exactly as I need it.
>>>> 1 mins after 3 days of trying variations without fully understanding
>>>> what I was trying...
>>>>         
>>>> thank you!!.
>>>>         
>>>> On May 18, 6:32 pm, David Huynh <[email protected]> wrote:
>>>>         
>>>>> kumarachi wrote:
>>>>>           
>>>>>> Hello,
>>>>>>             
>>>>>> Could someone help me please.
>>>>>> I am having some trouble creating links from an array in my JSON data.
>>>>>>             
>>>>>> I have this snippet from my data.js:
>>>>>> "scriptURI" :        [
>>>>>>                            "walkthrough.doc",
>>>>>>                            "overview.doc",
>>>>>>                            "datasheet.docx"
>>>>>>                    ],
>>>>>>             
>>>>>> And in my exhibit file, I want to be able to show these items as href
>>>>>> links in an Unordered List inside a Lens like this:
>>>>>> <ul>
>>>>>> <li><a href="../scripts/walkthrough.doc">walkthrough</a></li>
>>>>>> <li><a href="../scripts/walkthrough.doc">overview</a></li>
>>>>>> <li><a href="../scripts/walkthrough.doc">datasheet</a></li>
>>>>>> </ul>
>>>>>>             
>>>>>> I am sure this has been done many times elsewhere...
>>>>>>             
>>>>>> I am looking through the various examples for examples of iteration on
>>>>>> such fairly simple data - and attempted to use the foreach function,
>>>>>> but somehow cant get this working.  I dont quite understand what the
>>>>>> correct syntax is...and I am not even sure if using foreach is the
>>>>>> right approach.
>>>>>>             
>>>>>> I seem to get them all concatenated together, or in other variations,
>>>>>> I receive an error about G[1] undefined...What should the second
>>>>>> parameter here be?
>>>>>>             
>>>>>> <ul>
>>>>>> <li><span ex:content="foreach(.scriptURI,???)"></span></li>
>>>>>> </ul>
>>>>>>             
>>>>>> Can anyone help me?
>>>>>>             
>>>>> Kumar,
>>>>>           
>>>>> Try
>>>>>           
>>>>> <ul ex:content=".scriptURI">
>>>>>     <li><a ex:href-subcontent="../scripts/{{value}}"
>>>>> ex:content="value"></a></li>
>>>>> </ul>
>>>>>           
>>>>> Elements inside an element with ex:content are used as a template for
>>>>> rendering each value in the set that the ex:content expression evaluates 
>>>>> to.
>>>>>           
>>>>> David
>>>>>           
> >
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"SIMILE Widgets" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/simile-widgets?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to