Frage

Hat jemand das Jquery -Plugin bekommen? Jeditable ordnungsgemäß in Rails -Anwendungen zu laufen. Wenn ja, könnten Sie einige Hinweise darauf teilen, wie Sie es einrichten können? Ich habe Probleme mit der Erstellung der "Submit-URL".


IIRC, Sie können Ruby Code nicht einfach innerhalb von JavaScript anrufen (bitte lassen Sie mich falsch liegen :-). Meinst du RJs ??? Ist das nicht auf Prototyp beschränkt? Ich benutze JQuery.


AKTUALISIEREN:
Äh ..... fragte das vor einiger Zeit und in der Zwischenzeit auf eine andere Lösung. Aber IIRC Mein Hauptproblem war das folgende:

Ich benutze die erholsamen Ressourcen. Nehmen wir also an, ich muss einen Blog modellieren und somit die Ressourcen -Posts haben. Wenn ich einen Beitrag bearbeiten möchte (z. B. den Beitrag mit der ID 8), wird mein Update über HTTP an die URL gesendet http://my.url.com/posts/8 mit dem HTTP -Verbpost. Diese URL wird jedoch in meinem Rails -Code gebaut. Wie würde ich meine Submit-URL in meinen JQuery-Code bringen? Da es sich um einen erholsamen Code handelt, ändert sich meine Update -URL mit jedem Beitrag.

War es hilfreich?

Lösung 2

Entschuldigen Sie, dass ich das erst jetzt angesprochen habe, aber ich habe gerade die Zeit gefunden, meinen Code noch einmal zu prüfen. Ich glaube, ich habe mein Problem durch das folgende JavaScript (meine Anwendung.js in Rails) gelöst:

jQuery(document).ready(function($) {

$(".edit_textfield").each( function(i) {
  $(this).editable("update", {
         type      : 'textarea',
         rows      : 8,
         name : $(this).attr('name'),
         cancel    : 'Cancel',
         submit    : 'OK',
         indicator : "<img src='../images/spinner.gif' />",
         tooltip   : 'Double-click to edit...'
     })
 });
});

Dies funktioniert, wenn Ihre Controller -URLs erholsam sind.

Andere Tipps

Hier ist, wie ich Jeditable (1.6.2) mit meiner Rastful Rails App (2.2.2) verkabelt habe:

Inline -Form:

<div id="email_name"><%= h( @email.name ) %></div>

$('#email_name').editable( <%= email_path(@email).to_json %>, {
  name: 'email[name]',
  method: 'PUT',
  submitdata: {
    authenticity_token: <%= form_authenticity_token.to_json %>,
    wants: 'name'
  }
});

Regler:

def update
  @email = Email.find( params[:id] )
  @email.update_attributes!( params[:email )
  respond_to do |format|
    format.js
  end
end

update.js.erb

<%=
    case params[:wants]
    when 'name' then h( @email.name )
    # add other attributes if you have more inline forms for this model
    else ''
    end
%>

Mit dieser Switch -Anweisung ist es ein bisschen klobig. Es wäre schön, wenn Jeditable nur den eingereichten Wert standardmäßig speichern würde, wenn die AJAX -Anfrage erfolgreich war und nichts zurückgegeben wurde.

Wenn Sie .js -Dateien in Ihr HTML einbeziehen, dann nein, aber wenn Sie JS -Inline in Ihrer Ansichtsvorlage haben, können Sie ja.

Sie können auch .erb.js -Dateien haben, die JS -Ansichten sind.

Alles ist möglich: D.

Ich bin mir nicht sicher, ob ich das Problem, das Sie haben, völlig verstehe, aber ich denke, Sie könnten so etwas in Ihr JavaScript aufnehmen:

<%= url_for(@post) %>

Es hängt davon ab, wie Sie Ihr JavaScript strukturieren, wie Sie Ihre Dateien organisiert haben usw.

Wenn Ihre Controller etwas weniger als erholsam sind. Insbesondere wenn Sie eine Aktion haben, um ein bestimmtes Feld zu aktualisieren, funktioniert dies auch. Der Schlüssel besteht darin, das Authentifizierungs -Token zu übergeben.

index.html.erb

<span id="my_edit"><%= foo.bar %></span>

<script type="text/javascript">
  $(document).ready(function() {
    $("#my_edit").editable('<%= url_for(:action => "update_bar", 
                  :id => foo) %>',
                    {
                       method: 'PUT',
                       cancel    : 'Cancel',
                       submit    : 'OK',
                       indicator : "<img src='../images/spinner.gif' />",
                       tooltip   : 'Double-click to edit...',
                       submitdata: {
                         authenticity_token: <%= form_authenticity_token.to_json %>,
                       }
                     }
    });
</script>

Unverfolgerter Controller, der nicht rechtfertigt ist, nicht erholsam zu sein:

foo_controller.rb

def update_bar
    foo = Foo.find(params[:id])
    bar= params[:value]
            // insert justifiable code here
    foo.save
    render :text=>params[:value]
end

(Arbeitet mit Rails 2.2.2 und 2.3.2 mit Jeditable 1.7.0 und JRAILS 0.4, obwohl JRAILS hier nicht viel Interaktion spielt, als die Include für JQuery 1.5)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top