Will try to do a dummy app ASAP. Richard
On Wed, Aug 29, 2012 at 10:07 PM, lyn2py <lyn...@gmail.com> 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. >>>>> >>>>> -- >>>>> >>>>> >>>>> >>>>> >>>> -- >>> >>> >>> >>> >> >> -- > > > > --