I finally figured out how. Just remove user_signature=True and it works

On Thursday, August 30, 2012 9:48:21 PM UTC+8, Richard wrote:
>
> Will try to do a dummy app ASAP.
>
> Richard
>
> On Wed, Aug 29, 2012 at 10:07 PM, lyn2py <lyn...@gmail.com 
> <javascript:>>wrote:
>
>> Ok noted on your points below. I would like to clarify.
>>
>> First, the plugin files are only a controller file and a module file. 
>> they are both the same as on the web page.
>> Second, I have modified the module file so that it recognizes the first 
>> SELECT field, so the widget initialization looks different from the example 
>> on the website.
>> Third, regarding your comment that the plugin (module file) should be the 
>> one that returns the HTML, this I am not too sure.  When I run the original 
>> code, the ajax call goes to the controller, not the module file. And the 
>> controller looks like
>>
>> def index():
>>
>>     form = SQLFORM(db.product)
>>
>>     if form.accepts(request.vars, session):
>>
>>         session.flash = 'submitted %s' % form.vars
>>
>>         redirect(URL('index'))
>>
>>     return dict(form=form,
>>
>>                 categories=SQLTABLE(db().select(db.category.ALL)),
>>
>>                 colors=SQLTABLE(db(db.color.id > 0)(db.color.category == 
>> db.category.id
>>
>>                                 ).select(db.color.id, db.category.name, 
>> db.color.name)))
>>
>>
>> Questions:
>> Per your reply below, How does the widget "call" itself from the 
>> controller and return the select field?
>>
>> I think I don't understand the widget as well as you do. As you already 
>> have my model and controller code, can you give me an example of how my 
>> controller code should look like so that the widget works?
>>
>> Thanks.
>>
>> On Thursday, August 30, 2012 3:44:58 AM UTC+8, Richard wrote:
>>
>>> Here the example about how to initialize the widget :
>>>
>>> db.product.color.widget = lazy_options_widget(
>>>
>>>
>>>                   'product_category__selected', 
>>> 'product_category__unselected'**,
>>>
>>>
>>>                   lambda category_id: (db.color.category == category_id),
>>>
>>>
>>>                   request.vars.category,
>>>
>>>
>>>                   orderby=db.color.id,
>>>
>>>
>>>                   user_signature=True,
>>>
>>>
>>>                   # If you want to process ajax requests at the time of the 
>>> object construction (not at the form rendered),
>>>
>>>
>>>                   # specify your target field in the following:
>>>                   field=db.product.color,
>>>
>>>
>>>                   )
>>>
>>>
>>> I am not sure what are : 'jsChangeOn','jsChangeOff',
>>>
>>> In your widget init...
>>>
>>> And I don't understand why you need to create a lazy_option function??
>>>
>>> Did you install the plugin into your app and make the proper import or 
>>> did you try to just copy/paste the code provided on the web page of 
>>> s-cubism??
>>>
>>> You don't need the your function it suppose to be the lazy_option_widget 
>>> that do this task of making the ajax call and return the answer from the 
>>> database to your view and update you dropbox (html SELECT OPTIONS)...
>>>
>>> I am puzzled a bit.
>>>
>>> R
>>>
>>> On Wed, Aug 29, 2012 at 12:02 PM, lyn2py <lyn...@gmail.com> wrote:
>>>
>>>> OK sure :)
>>>>
>>>> MODELS
>>>> db.define_table('quotations', 
>>>>     Field('company_id','reference companies'),
>>>>     Field('contact_id','reference contacts',
>>>>         widget=lazy_options_widget('**jsChangeOn','jsChangeOff',
>>>>         lambda customer_id: (db.contacts.customer_id == customer_id),
>>>>         trigger=request.vars.customer_**id, keyword="id",
>>>>         user_signature=True)
>>>>         ), 
>>>>      Field('name','string',length=**255,requires=IS_NOT_EMPTY()),
>>>> )
>>>>
>>>> db.companies and db.contacts are just separate tables, where each 
>>>> company can have many different contacts.
>>>>
>>>> CONTROLLER
>>>> def test():
>>>>     form=SQLFORM(db.quotations)
>>>>     # rows = 
>>>> db(db.contacts.customer_id==re**quest.post_vars.id<http://request.post_vars.id>
>>>> ).select()
>>>>     return locals()
>>>>
>>>> def lazy_options():
>>>>     if request.env.request_method=='**POST':
>>>>         rows = 
>>>> db(db.contacts.customer_id==re**quest.post_vars.id<http://request.post_vars.id>
>>>> ).select()
>>>>         return SQLTABLE(rows)
>>>>     else:
>>>>         return None
>>>>
>>>> As I have no intentions to save the form, dbio codes has been left out.
>>>>
>>>> I am using a generic view.
>>>> I made changes to the plugin to recognize the javascript onchange, so 
>>>> there is no problems with detecting and making the ajax call. The ajax 
>>>> call 
>>>> goes to a separate page "lazy_options" in the same controller.
>>>>
>>>> Whenever the first field onchange is triggered, the second field will 
>>>> update (expected behavior). 
>>>> But the html that appears is not a SELECT field.
>>>>
>>>> I use SQLTABLE(rows) because that was in the example provided. In place 
>>>> of that I have tried "return rows", tried to assemble SELECT/OPTIONS on my 
>>>> own to no avail.
>>>>
>>>> I appreciate your help! What am I missing? Thank you :)
>>>>
>>>>
>>>> On Wednesday, August 29, 2012 11:06:37 PM UTC+8, Richard wrote:
>>>>
>>>>> Can you provide :
>>>>>
>>>>> Models (for the concerned tables)
>>>>> Controller (page form concerned)
>>>>> View (of the function page)
>>>>>
>>>>> It will be easier to help.
>>>>>
>>>>> Richard
>>>>>
>>>>>
>>>>> On Wed, Aug 29, 2012 at 10:56 AM, lyn2py <lyn...@gmail.com> wrote:
>>>>>
>>>>>> Yes that is the internal code.
>>>>>>
>>>>>> I don't understand the example given. I have tested it but I don't 
>>>>>> know what I'm missing.
>>>>>>
>>>>>> My setup is also different than the example given in their website.
>>>>>>
>>>>>> My current and only bottleneck is what value to return to the ajax 
>>>>>> call. I have tried SQLTABLE(rows), SELECT, rows, XML versions and none 
>>>>>> could produce a select field with the filtered options.
>>>>>>
>>>>>> Please help, I am out of ideas.
>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>  -- 
>>>>  
>>>>  
>>>>  
>>>>
>>>
>>>  -- 
>>  
>>  
>>  
>>
>
>

-- 



Reply via email to