The code I posted before should do that. The inject call does the same
object initialization as the javascript you originally posted.

To be clear, the old haml generated client-side code that looked like this:
<script>
var departments = new Object();
departments[9] = new Object();
departments[67] = new Object();
...
</script>

After this code was run, the resultant `departments` object would look like
this:

departments = { 9: {}, 67: {} };

The inject code I provided does the same thing except it bypasses
generation of the client-side javascript and instead generates the
resultant object as a JavaScript object literal. The new code would look
like this:

<script>
var departments = { 9: {}, 67: {} };
...
</script>



On Tue, May 21, 2013 at 12:00 PM, Les Nightingill <codehac...@comcast.net>wrote:

> Thanks for your suggestions Duncan.
>
> I would most definitely be happier mapping the Ruby variables to JSON in
> the controller. But I'm in the middle of a large Rails upgrade and I'm
> hoping to defer such refactoring improvements, at least until I get this
> view basically working and (important) get the tests all green. My first
> step is the conversion to haml.
>
> So... given that it's a suboptimal architecture, how can I take this
> working erb:
>
> <script>
> var departments = new Object()
> <% @faculties.each do  |fac| %>
> departments['<%= fac.id -%>']= new Object()
> <% end %>
> ...
> </script>
>
> and convert it to haml?
>
>
> On Tuesday, May 21, 2013 9:38:38 AM UTC-7, Duncan Beevers wrote:
>
>> You might be happier using Ruby to map your data to JSON, and then
>> feeding that to your JavaScript, rather than using Ruby to dynamically
>> generate JavaScript.
>>
>> For example, if you wanted to map the data directly in the view, could do
>> so like this.
>>
>> - mapped_faculties = @faculties.inject({}) { |a, fac| a[fac.id] = {} }
>> :javascript
>>   var departments = #{mapped_faculties.to_json};
>>
>> In general, I would recommend doing these types of transformations in the
>> controller rather than in the view itself, but the principle is the same.
>>
>>
>> On Tue, May 21, 2013 at 11:29 AM, Duncan Beevers <dun...@dweebd.com>wrote:
>>
>>> You're in a javascript filter. The code that you think is iterating
>>> through @faculties is actually just being inlined as javascript into a
>>> script tag.
>>>
>>>
>>> On Tue, May 21, 2013 at 11:22 AM, Les Nightingill 
>>> <codeh...@comcast.net>wrote:
>>>
>>>>  I have this in a rails view file:
>>>>
>>>> ...
>>>> :javascript
>>>>   var departments = new Object()
>>>>   - @faculties.each do  |fac|
>>>>     departments['#{ fac.id }']= new Object()
>>>>
>>>> And the error message I get is:
>>>>
>>>> undefined local variable or method `fac' for 
>>>> #<#<Class:0x00000104e1b3d8>:**0x000001074bb420>
>>>>
>>>> I'm clearly missing something very basic. Can anyone see what the
>>>> problem is, please. Thanks in advance.
>>>>
>>>> Les
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Haml" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to haml+uns...@googlegroups.**com.
>>>> To post to this group, send email to ha...@googlegroups.com.
>>>>
>>>> Visit this group at 
>>>> http://groups.google.com/**group/haml?hl=en<http://groups.google.com/group/haml?hl=en>
>>>> .
>>>> For more options, visit 
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>
>>>>
>>>>
>>>
>>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "Haml" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to haml+unsubscr...@googlegroups.com.
> To post to this group, send email to haml@googlegroups.com.
> Visit this group at http://groups.google.com/group/haml?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Haml" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to haml+unsubscr...@googlegroups.com.
To post to this group, send email to haml@googlegroups.com.
Visit this group at http://groups.google.com/group/haml?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to