Vra

Ek wil 'n tekskassie dat die gebruiker kan tik in wat toon 'n Ajax-bevolk lys van name my model se, en dan wanneer die gebruiker kies een wat ek wil hê dat die HTML om die model se ID te red, en gebruik dit wanneer die vorm ingedien word.

Ek het al skeer by die auto_complete plugin wat het uitgesny in Rails 2, maar dit lyk of daar geen aanduiding dat hierdie nuttig kan wees nie. Daar is 'n Railscast episode dat die gebruik van daardie prop dek, maar dit beteken nie raak oor hierdie onderwerp. Die kommentaar wys daarop dat dit 'n kwessie kan wees, en punt om model_auto_completer as 'n moontlike oplossing , wat blyk te werk as die besigtig items is eenvoudig snare, maar die plaas teks sluit baie van rommel spasies, indien (soos ek graag wil doen) jy 'n prentjie in die lys items, ten spyte van wat die dokumentasie sê .

Ek kon waarskynlik hack model_auto_completer in vorm, en ek kan nog steeds eindig om dit te doen, maar ek is gretig om uit te vind of daar beter opsies wat daar is.

Was dit nuttig?

Oplossing 2

Ek het 'n geykte fix vir die rommel ruimtes van die beeld het. Ek het ook 'n :after_update_element => "trimSelectedItem" om die opsies hash van die model_auto_completer (dit is die eerste hash van die drie gegewe). My trimSelectedItem vind dan die toepaslike sub-element en maak gebruik van die inhoud van wat vir die element waarde:

function trimSelectedItem(element, value, hiddenField, modelID) {
    var span = value.down('span.display-text')
    console.log(span)
    var text = span.innerText || span.textContent
    console.log(text)
    element.value = text
}

Dit is egter loop dan afoul van die :allow_free_text opsie, wat by verstek verander die teks terug sodra die teks boks verloor fokus as die teks binne is nie 'n "geldige" item uit die lys. So moes ek afskakel wat ook deur ':allow_free_text => true in die opsies hash (weer, die eerste hash). Ek sal regtig eerder dit gebly op, al is.

So my huidige oproep aan die autocompleter skep is:

<%= model_auto_completer(
    "line_items_info[][name]", "", 
    "line_items_info[][id]", "",
    {:url => formatted_products_path(:js),
     :after_update_element => "trimSelectedItem",
     :allow_free_text => true},
    {:class => 'product-selector'},
    {:method => 'GET',  :param_name => 'q'}) %>

En die produkte / index.js.erb is:

 <ul class='products'>
    <%- for product in @products -%>
    <li id="<%= dom_id(product) %>">
            <%= image_tag image_product_path(product), :alt => "" %>
            <span class='display-text'><%=h product.name %></span>
    </li>
    <%- end -%>
 </ul>

Ander wenke

Ek gerol my eie. Die proses is 'n bietjie ingewikkelde, maar ...

Ek het net 'n text_field op die vorm met 'n waarnemer. Wanneer jy begin tik in die veld teks, die waarnemer stuur die search string en die kontroles gee 'n lys van voorwerpe (maksimum van 10).

Die voorwerpe word dan gestuur word aan lewer via 'n gedeeltelike wat vul die dinamiese outomaties resultate. Die gedeeltelike vult eintlik link_to_remote lyne wat weer terug te plaas om die kontroleerder. Die link_to_remote stuur die id van die gebruiker seleksie en dan skoon sommige RJS die soek, vul in die naam in die veld teks, en dan plaas die gekose id in 'n verborge vorm veld.

Sjoe ... ek kon nie 'n plugin om dit te doen op die tyd te vind, so ek gerol my eie, ek hoop almal wat sin maak.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top