Try getting rid of the "hidden" in your component target name. The target 
name is used as a CSS div id, and I don't think you can have multiple 
CSS ids for a single HTML element.
 
Anthony

On Saturday, June 11, 2011 5:39:42 AM UTC-4, 黄祥 wrote:

> thank you so much for corrected my mistook code, anthony, but the results 
> is same now the blog comment show appears loading...  First time my 
> incorrect code show the blog comment form page appears loading... and then 
> right now the blog comment show. actually i come from the simple things one 
> (without ajax, jquery, and component) and right now i try to learn and 
> implement both of it's.  
>
> any hints, suggestion or references? 
> thank you so much before.
>
> On Sat, Jun 11, 2011 at 12:44 PM, Anthony <[email protected]> wrote:
>
>> I think you're specifying the target div name in the wrong place. Instead 
>> of:
>>   
>>  {{=LOAD('default', 'blog_comment_show.load', args = page.id, ajax = 
>> True)}}
>> {{=LOAD('default', 'blog_comment_add.load', args = page.id, 
>> target = 'comments_%s hidden' % page.id, ajax = True)}}
>>  
>> I think you want:
>>  
>>  {{=LOAD('default', 'blog_comment_show.load', args = page.id,
>>  target = 'comments_%s hidden' % page.id, ajax = True)}}
>> {{=LOAD('default', 'blog_comment_add.load', args = page.id, ajax = 
>> True)}}
>>  
>>  
>> Does that change help?
>>  
>> Also, in __add_2(), you might want to return response.js conditionally, 
>> only when a new comment has actually been added -- otherwise, when the page 
>> first loads, the blog_comment_show() component will be called/load twice 
>> (once because of the LOAD, and once because of the response.js from the 
>> blog_component_add() component).
>>  
>> If you're still having problems, I recommend creating a simplified version 
>> of the setup just to see if you can get the basic inter-component 
>> communication working -- then add in all the complexity and see where it 
>> breaks down.
>>  
>> Anthony
>>  
>> On Saturday, June 11, 2011 12:46:29 AM UTC-4, 黄祥 wrote:
>>
>>>  yes, i have. 
>>>
>>>  def blog_comment_show():
>>>     return 
>>> __show_2(blog, blog_index, blog_comment, blog_comment_blog_id, 
>>> blog_comment_active)
>>>
>>> @auth.requires_login()
>>> def __show_2(table_0, index_link, table_1, field, active):
>>>     page = table_0(request.args(0)) or redirect(URL(index_link))
>>>     results = db((field == page.id) & (active == True)).select(orderby = 
>>> ~table_1.id, 
>>>                                                                cache = 
>>> (cache.ram, 
>>>                                                                         
>>> 10))
>>>     return dict(page = page, results = results)
>>>
>>> i think the error is on target load, so that my page keep showing 
>>> loading...
>>>
>>> did you have any way out for this probelm?
>>> thank you so much.
>>>
>>>   On Sat, Jun 11, 2011 at 11:05 AM, Anthony <[email protected]> wrote:
>>>
>>>>   Do you have a blog_comment_show() action in your controller?
>>>>   
>>>> On Friday, June 10, 2011 10:58:56 PM UTC-4, 黄祥 wrote:
>>>>
>>>>>    thank you so much for your hints, anthony, but, pardon me, the 
>>>>> results on the form components is loading..., the page didn't show an 
>>>>> error, 
>>>>> but keep loading..., is there something i missed in my code? 
>>>>>
>>>>> e.g.
>>>>>     *=== controller ===*
>>>>>
>>>>> blog = db.blog
>>>>> blog_comment = db.blog_comment
>>>>> blog_comment_blog_id = db.blog_comment.blog_id
>>>>> blog_comment_active = db.blog_comment.is_active
>>>>>
>>>>> def blog_comment_add():
>>>>>     return __add_2(blog, blog_index, blog_comment, 
>>>>> blog_comment_blog_id)
>>>>>
>>>>> @auth.requires_login()
>>>>> def __add_2(table_0, index_link, table_1, field):
>>>>>     page = table_0(request.args(0)) or redirect(URL(index_link))
>>>>>     field.default = page.id
>>>>>     form = crud.create(table_1, message = T('Record Inserted'), 
>>>>>                        next = URL(args = page.id))
>>>>>     *response.js = 'web2py_component(action = "%s", target = "%s")' *
>>>>> *                  % (URL('blog_comment_show.load'), *
>>>>> *                  'comments_%s hidden' % page.id)*
>>>>>     return dict(page = page, form = form)
>>>>>
>>>>> *=== view ===*
>>>>>
>>>>> {{=LOAD('default', 'blog_comment_show.load', args = page.id, ajax = 
>>>>> True)}}
>>>>> *{{=LOAD('default', 'blog_comment_add.load', args = page.id, *
>>>>> *        target = 'comments_%s hidden' % page.id, ajax = True)}}*
>>>>>         
>>>>> *=== blog_comment_show.load ===*
>>>>>
>>>>> {{if len(results):}}
>>>>>     <span onclick = "jQuery('.comments_{{=page.id
>>>>> }}').slideToggle('slow');">
>>>>>     {{=A(T('Comments (%s)' % len(results)), _href = '#')}}
>>>>>     </span>
>>>>>         
>>>>>     <div class = "comments_{{=page.id}} hidden">
>>>>>     {{for blog_comment in results:}}
>>>>>         {{=SPAN(db.auth_user[blog_comment.created_by].first_name, T(' 
>>>>> on '), 
>>>>>                 blog_comment.created_on, T(' Said '), 
>>>>>  blog_comment.comment)}}
>>>>>         {{=BR()}}
>>>>>         {{=SPAN(blog_comment.like, 
>>>>>                 _id = 'blog_comment_like_%s' % blog_comment.id)}}
>>>>>         {{=SPAN(T('People Like This'))}}
>>>>>             
>>>>>         <span onclick="jQuery('#id').val('{{=blog_comment.id}}');
>>>>>                        ajax('{{=URL('blog_comment_like.load')}}', 
>>>>> ['id'], 'blog_comment_like_{{=blog_comment.id}}');">
>>>>>         {{=A(T('Like'), _href = '#')}}
>>>>>         </span>
>>>>>         {{=BR()}}
>>>>>     {{pass}}
>>>>>     </div>
>>>>> {{else:}}
>>>>>     {{=DIV(B(T('No Comment Posted Yet')))}}
>>>>> {{pass}}
>>>>>
>>>>> *=== blog_comment_add.load ===*
>>>>>
>>>>> {{=DIV(A(T('Post a Comment'), _href = '#'), _class = 'post', 
>>>>>        _onclick = "jQuery('.form_%s').slideToggle('slow');" % page.id
>>>>> )}}
>>>>>
>>>>> {{=DIV(form, _class = 'form_%s hidden' % page.id, 
>>>>>        _onsubmit = "ajax('blog_comment_add', [], 'comments_%s 
>>>>> hidden');" % page.id)}}
>>>>>
>>>>>    On Sat, Jun 11, 2011 at 8:28 AM, Anthony <[email protected]> wrote:
>>>>>
>>>>>> Maybe try having the post comment action return some JS via 
>>>>>> response.js that calls the web2py_component JS function to update the 
>>>>>> list 
>>>>>> component:
>>>>>>  
>>>>>> def post_comment():
>>>>>>     # do some stuff
>>>>>>     response.js='web2py_component(action="%s",target="%s")' % 
>>>>>> (URL('list_comments.load'), 'comment_list')
>>>>>>     return dict(...)
>>>>>>  
>>>>>> def list_comments():
>>>>>>     # code to list comments
>>>>>>  
>>>>>> In view:
>>>>>>  
>>>>>> {{=LOAD('post_comment.load', ajax=True)}}
>>>>>> {{=LOAD('list_comments.load', target='comment_list', ajax=True)}} 
>>>>>>  
>>>>>>  
>>>>>> See 
>>>>>> http://web2py.com/book/default/chapter/13#Client-Server-Component-Communications
>>>>>> .
>>>>>>  
>>>>>> Anthony
>>>>>>
>>>>>> On Friday, June 10, 2011 8:44:26 PM UTC-4, 黄祥 wrote:
>>>>>>
>>>>>>> hi, 
>>>>>>>
>>>>>>> is ajax can work in components? i mean let say that i separated the 
>>>>>>> comment into 2 components, 1 for list of view comments and the other 
>>>>>>> is form to post the comment. i have a problem when i post the comment 
>>>>>>>
>>>>>>> using the form, the data that have been posted is not directly change 
>>>>>>>
>>>>>>> on list of comments (the other components), i must refresh my browser 
>>>>>>>
>>>>>>> many times so that the list comments can show the latest posted 
>>>>>>> comment. is there any clue or solution to implement ajax that works 
>>>>>>> in 
>>>>>>> other components? 
>>>>>>>
>>>>>>> any hints, suggestion is greatly appreciate. 
>>>>>>> thank you very much.
>>>>>>
>>>>>>
>>>>>
>>>
>

Reply via email to