That's pretty much exactly where I'm moving to. I'm starting from
someone else's code who replaced the content of div#dialog repeatedly
with different content, hiding and showing it multiple times. But, I
wanted to try and encapsulate the dialog into the class itself, I just
haven't quite gotten all the way there. I think your help below will
get me on my way.
Now here's a question for you: why did you bind the anonymous function
which calls close_dialog() rather than bind close_dialog() as an event
listener on deactivating objects?
-- Dash --
Kjell Bublitz wrote:
> Yes, thats true. It is more straight forward, but you could also use
> bind() for it.
>
> Assuming you want to create a new dialog like so: new Dialog(..), it
> makes sense to create a random ID for each dialog. I think a class is
> ment to handle multiple instances of something. Since you are
> currently using a static ID "dialog" you can never handle more then
> one dialog. If you want to achive this, a internal close method is the
> way to do it. But then you would have to create all elements with the
> Template class on demand, rather then having them sitting empty in the
> DOM all the time.
>
> initialize: function() {
> this.randomID = 'dialog'+ Math.floor(Math.random()*6000)
> }
> showDialog: function(xhr) {
> var dialogObj = {randomID: this.randomID, content: xhr.responseText};
>
> new Insertion.after('overlay', new Template('<div
> id="#{randomID}" class="dialog">#{content}</div>').evaluate(dialogObj)
> );
>
> // After this its available and you can use $(randomID) to bind
> your events along.
>
> $(this.randomID).getElementsBySelector("[action=deactivate]").each(function(e){
> e.observe('click', function(){ this.closeDialog() }.bind(this) )
> });
> }
>
> And closeDialog could look like this:
>
> closeDialog: function() {
> if($('overlay').visible()) { // overlay is always present.
> $('overlay').hide() // we just hide and show on demand next time.
> }
> $(this.randomID).remove(); // generic, so we remove it
> }
>
> I hope this helps.. Of course this would need you to rewrite the whole
> class (use Ajax.Request over Update), but thats the way i would do it,
> and your internal close function would serve some purpose since it
> uses the value of the instance that you create for each Dialog.
>
>
> On 3/24/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
>
>> Interesting. I like it. I was more focused on trying to get the the
>> deactivating elements to call a method of the dialog object, but then the
>> dialog method would probably only end up performing the same actions as you
>> described. Thanks!
>> -- Dash --
>>
>>
>> Kjell Bublitz wrote:
>> On 3/24/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
>>
>>
>> So, one of the things I've always wanted to do was expand upon the
>> simplicity of the Lightbox Gone Wild! object that the coders at
>> www.particletree.com put together months ago. I used it on an
>> application I wrote to organize my own picture albums on my localhost
>> web server, but I had to hack it apart to get it to do the things I
>> wanted it to do. I looked at the Prototype Window class, thick box,
>> grey box, etc. and all of them didn't seem to be quite what I was
>> looking for. So, this afternoon I decided to try and write one myself.
>> I've gotten about 95% of the way completed (at least for the first go)
>> but I can't get the dialog, after it is shown, to disappear.
>>
>> Here's a pastie: http://pastie.caboo.se/49182
>> Here's a demo: http://www.dashifen.com/.temp/
>>
>> You can see at line #19 within the pastie that I'm trying to get
>> anything within the newly loaded div#dialog element which an action
>> attribute equal to "deactivate" and then capture click events to close
>> the dialog. If I change line #20 to include an anonymous function
>> (element.observe("click", function() { alert("hello world"); }); for
>> example), the anonymous function works fine. I suspect I'm still hazy
>> on the exact usage (and purpose) of the bindAsEventListener() method of
>> the Function object.
>>
>> Anyone got any ideas about how to get the darned things to close when
>> they're opened?
>>
>> $("dialog").getElementsBySelector("[action=deactivate]").each(function(e){
>> e.observe('click', function(){
>> $("dialog").remove(); $('overlay').remove()
>> })
>> });
>>
>>
>>
>>
>> Also, for what it's worth, I'm not even worrying about anything other
>> than Firefox at this point. The first step is to get it working. I'll
>> worry about getting working in other browsers as phase 2!! Also, FYI,
>> I'm using prototype.js version 1.5.1 release candidate 2.
>>
>> Thanks All,
>> -- Dash --
>>
>>
>>
>>
>>
>> >
>>
>>
>
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Spinoffs" 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/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---