Forum: Ruby on Rails Adding conditions (if-else) to RJS template

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
006a4831843b48f6102d5d3cf92ae283?d=identicon&s=25 Shilo Ayalon (gte351s)
on 2009-01-19 09:27
I tried following Ryan Bates' railscast on rjs tips
(http://railscasts.com/episodes/45-rjs-tips) and apply his method of
using if-else inside the rjs template, but can't seem to get it to work.
Basically, I'm trying to toggle the text on a link when it's clicked
(test.js.rjs):

page << "if ($('test_link').value == 'one' {"
page.replace_html 'test_link', 'two'
page << "} else {"
page.replace_html 'test_link', 'one'
page << "}"

I believe I have the necessary view and controller code:

<%= link_to_remote 'one', :url => { :action => 'test' } %>

and

def test
  respond_to do |format|
    format.js
  end
end
00973881979aa0a660ffbbb2f7a907fb?d=identicon&s=25 Peter De Berdt (Guest)
on 2009-01-19 09:56
(Received via mailing list)
On 19 Jan 2009, at 09:27, Shilo Ayalon wrote:

> page << "} else {"
> page.replace_html 'test_link', 'one'
> page << "}"


Syntax error - does not compute.

Look closely and see how you forgot the ")" after "'one'". Javascript
is very punctuation sensitive, you need to pay special attention to
it. Also, use Firefox for testing and install Firebug to debug your
javascript. It would have indicated this error.


Best regards

Peter De Berdt
006a4831843b48f6102d5d3cf92ae283?d=identicon&s=25 Shilo Ayalon (gte351s)
on 2009-01-19 10:37
> Syntax error - does not compute.
>
> Look closely and see how you forgot the ")" after "'one'". Javascript
> is very punctuation sensitive, you need to pay special attention to
> it. Also, use Firefox for testing and install Firebug to debug your
> javascript. It would have indicated this error.

Thanks Peter. I changed my code to include the closing parenthesis, but
it seems to not work still. I am using firefox w/ firebug, although I'm
still not that seasoned in debugging js - I'll read up on that. Here's
what I have now:

page << "if ($('test_link').value == 'one') {"
page.alert('hello!')
page << "}"
00973881979aa0a660ffbbb2f7a907fb?d=identicon&s=25 Peter De Berdt (Guest)
on 2009-01-19 11:47
(Received via mailing list)
On 19 Jan 2009, at 10:37, Shilo Ayalon wrote:

> Thanks Peter. I changed my code to include the closing parenthesis,
> but
> it seems to not work still. I am using firefox w/ firebug, although
> I'm
> still not that seasoned in debugging js - I'll read up on that. Here's
> what I have now:
>
> page << "if ($('test_link').value == 'one') {"
> page.alert('hello!')
> page << "}"

Then add before your first "page <<" statement:

page << "console.log($('test_link'));"
page << "console.log($('test_link').value);"

There must be something wrong with the value you are trying to access
then.

Best regards

Peter De Berdt
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-01-19 11:48
(Received via mailing list)
On 19 Jan 2009, at 09:37, Shilo Ayalon wrote:

> but
> it seems to not work still. I am using firefox w/ firebug, although
> I'm
> still not that seasoned in debugging js - I'll read up on that. Here's
> what I have now:

Do links even have a value attribute? It doesn't seem to contain the
links text if that's what you were expecting.

Fred
006a4831843b48f6102d5d3cf92ae283?d=identicon&s=25 Shilo Ayalon (gte351s)
on 2009-01-19 13:10
> Do links even have a value attribute? It doesn't seem to contain the
> links text if that's what you were expecting.
>
> Fred

Fred - I tried using $('test_link').innerHtml == 'one', but the result
is the same.

Peter - Using firebug, I tried typing in the console the following:

>> console.log($('test_link').value)
undefined
>> console.log($('test_link').innerHtml)
undefined

I tried just using a simple span <span id="test">hello</span> to see if
console.log works, and I get the same 'undefined' message, even though
it's showing in the page markup.

I don't want to make this an issue and take up anymore of your time -- I
guess I need to improve on my javascript.

Thanks for all your help!
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-01-19 13:32
(Received via mailing list)
On 19 Jan 2009, at 12:10, Shilo Ayalon wrote:

>
>
>> Do links even have a value attribute? It doesn't seem to contain the
>> links text if that's what you were expecting.
>>
>> Fred
>
> Fred - I tried using $('test_link').innerHtml == 'one', but the result
> is the same.
>
That should be: innerHTML

Fred
This topic is locked and can not be replied to.