2008-10-21 6 views
13

Кто-нибудь получил плагин jquery jeditable для правильной работы в приложениях Rails. Если да, можете ли вы поделиться некоторыми подсказками о том, как его настроить? У меня возникли проблемы с созданием «submit-url».Ruby on Rails и jeditable (jquery)


IIRC, вы не можете просто вызвать ruby-код из javascript (пожалуйста, позвольте мне ошибаться :-). Вы имеете в виду RJS ??? Разве это не ограничивается прототипом? Я использую jQuery.


UPDATE:
эээ ..... спросил это некоторое время назад, и в то же время перешли к другому решению. Но IIRC моя основная проблема заключалась в следующем:

Я использую ресурсы RESTful. Итак, скажем, мне нужно смоделировать блог и, таким образом, иметь ресурсы «посты». Если я хочу отредактировать сообщение (например, сообщение с ID 8), мое обновление отправляется через HTTP по адресу URL http://my.url.com/posts/8 с HTTP-сообщением POST. Однако этот URL-адрес сконструирован в моем коде Rails. Итак, как я могу получить свой url-адрес в свой код jQuery? Поскольку это код RESTful, мой URL-адрес обновления будет изменяться с каждым сообщением.

+0

Какие у вас проблемы с адресом отправки? – Codebeef 2008-10-30 12:45:12

ответ

5

Извините меня, что вы сейчас это делаете, но я только нашел время, чтобы заглянуть в мой код снова. Думаю, я решил свою проблему с помощью следующего javascript (мое приложение .js в пределах рельсов):

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...' 
    }) 
}); 
}); 

Это работает, если ваши URL-адреса контроллера RESTful.

+3

Как он узнает, к какому URL должен подчиняться? – Angela 2010-10-25 00:33:30

+0

почтовый URL-адрес оказывается таким же, как действие show, и формирует по умолчанию тот же URL-адрес, если ничего не указано. Разница заключается в методе http, и рельсы направляют его соответственно. – DGM 2011-12-16 03:10:10

0

Я "не уверен, что я полностью понимаю проблему вы имеете, но я думаю, что вы могли бы поставить что-то подобное в вашем JavaScript:

<%= url_for(@post) %> 

Это зависит от того, как вы структурирования JavaScript, как у вас есть ваши файлы, организованные и т. д.

1

Если вы включаете файлы .js в свой html, то нет, но если у вас есть js inline в вашем шаблоне просмотра, то да вы можете.

У вас также могут быть файлы .erb.js, которые представляют собой js-представления.

Все возможно: D

+0

Что касается тех файлов .erb.js, не могли бы вы взглянуть на мой другой пост? Я бы очень признателен! http://stackoverflow.com/questions/260476/rails-how-to-update-a-hasmany-through-relation-via-jquery – Sebastian 2008-11-04 10:40:28

10

Вот как я подключен до JEditable (1.6.2) с моим успокоительным приложением Rails (2.2.2):

Встраиваемой форма:

<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' 
    } 
}); 

контроллер:

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 
%> 

Это немного неуклюжим с этим переключателем заявления. Было бы неплохо, если бы JEditable просто сохранил переданное значение по умолчанию, если запрос ajax был успешным и ничего не было возвращено.

0

Если вы контроллеры немного меньше, чем спокойны.В частности, если у вас есть действие по обновлению определенного поля, это также работает. Ключ передает токен аутентификации.

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> 

упрощенно контроллер, который не оправдывает не быть успокоительным:

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 

(работает с Rails 2.2 .2 и 2.3.2 с Jeditable 1.7.0 и jRails 0.4, хотя jRails не играет большого взаимодействия с ней e, кроме предоставления включений для jQuery 1.5)

 Смежные вопросы

  • Нет связанных вопросов^_^