Thanks Bryan, this looks very useful.
The menu option is not actually "New Object" but rather "New
Product" (ow whatever the model is), right?
I think it might be better (clearer to the user) to have something
more like a prompt ("Select one...") as the first option, have the
field-list hidden by default, and have "New Whatever" as the last
option? Hmm then again it could get buried if the list is long. I'm
just thinking that the option to chose an existing object might not be
noticed. Can anyone think of any good examples of this type of UI
they've seen on the web?
Tom
On 1 Mar 2009, at 23:14, Bryan Larsen wrote:
>
> I've tried to take one of the tags I'm using it in the class and
> generalize it to contribute back. I have a couple of issues.
>
> The tag itself is select-one-or-field-list. It's simply a select-one
> and a field-list for the same object. If "New Object" is selected,
> the field-list is displayed, otherwise it is disabled & hidden.
>
> Here's the tag itself:
>
> <def tag="select-one-or-field-list">
> <div class="select-one-or-field-list">
> <select-one include-none blank-message="&'New
> '+this_field.titleize" class="select-one-or-field-list-select" merge
> param />
> <field-list param />
> </div>
> </def>
>
> and the javascript:
>
> (function() {
> function selectChanged(el) {
> if(el.value) {
> $(el).siblings().each(function(elc) {
> $(elc).setStyle({display: 'none'});
> });
> $(el).adjacent('input,select,textarea,button').each
> (function(elc) {
> elc.disabled = true;
> });
> } else {
> $(el).siblings().each(function(elc) {
> // FIXME: assumption of block display
> $(elc).setStyle({display: 'block'});
> });
> // FIXME: maybe some inputs were previously disabled
> $(el).adjacent('input,select,textarea,button').each
> (function(elc) {
> elc.disabled = false;
> });
> }
> }
>
> new HoboBehavior("div.select-one-or-field-list", {
> events: {
> "> select.select-one-or-field-list-select": {
> ":change": 'eventSelectChanged'
> }
> },
>
> eventSelectChanged: function(ev, el) {
> Event.stop(ev);
> selectChanged(el);
> }
> });
>
> document.observe("dom:loaded", function() {
> $$("select.select-one-or-field-list-select").each(function(el)
> {
> selectChanged(el);
> });
> });
> })();
>
> Issues:
>
> 1) This doesn't work when the belongs-to is nil, I need to add <%
> this.patient = Patient.new if this.patient.nil? %> in front of my
> <select-one-or-field-list:patient /> invocation.
>
> 2) When the select-one-or-field-list invocation is inside of an input-
> many, it's possible to get into a messed up state. For instance, if
> you have two elements, and the top one has a selection and the bottom
> one is on "new" and you click the "+", the new selection contains the
> selection from the top element, but fields are displayed and copied
> from the second field-list. I believe that this may be a bug in
> input-
> many rather than my code.
>
> Bryan
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Hobo
Users" 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/hobousers?hl=en
-~----------~----~----~----~------~----~------~--~---