Ruby on Rails, Low Pro и JQuery (через JRails) - PullRequest
0 голосов
/ 12 июня 2009

Я использую JRails с Ruby on Rails, чтобы я мог просто использовать jQuery, так как я более знаком с ним. Я также пытаюсь использовать Low Pro для удаленной отправки некоторых моих форм.

В настоящее время я сталкиваюсь с интересной проблемой, которая поставила меня в тупик. Я добавил следующее в мой application.js файл и знаю, что они работают правильно, потому что я вижу возвращенный ответ (используя Firebug в Firefox):

$.ajaxSetup({
  dataType: "script"
});

$(function() {
  $('a.remote').attach(Remote.Link);
  $('form.remote').attach(Remote.Form);
});

Все, что мне нужно сделать, это добавить class="remote" к своим ссылкам и формам, и все прекрасно работает. Часть dataType: "script" гарантирует, что она возвращает eval() в возвращенном тексте ответа, чтобы она могла корректно обновить страницу.

Итак, у меня есть простая ссылка, которая создает новый груз. В моем файле new.js.rjs есть следующее:

page.insert_html :bottom, '#shipments_table',
    :partial => 'test', :locals => { :shipment => @shipment }

Если я заменю это на page.visual_effect :fade, '#shipments_table', это произойдет так, как вы ожидаете. Если мой _test.html.erb файл довольно прост, он тоже работает. Проблема в том, что я пытаюсь добавить <form> к своему частичному. В зависимости от размещения тегов <form> возникают различные проблемы. Например, это

<tr>
  <form>
    <td>Some Text</td> 
  </form>
</tr>

а это

<form>
  <tr> 
    <td>Some Text</td> 
  </tr>
</form>

не показывать абсолютно ничего Это

<form></form>
<tr> 
  <td>Some Text</td> 
</tr>

заставит Some Text появиться, но он потеряет все мое форматирование. И это

<tr> 
  <td>Some Text</td> 
</tr>
<form></form>

работает именно так, как мне нужно (визуально говоря). Однако очевидным недостатком этого является то, что я не могу поместить свои входные данные формы в столбцы таблицы, что в целом делает весь процесс бесполезным. Вероятно, я могу обойти это, просто поместив их все в одну строку внутри <div> или чего-то подобного, но я бы предпочел, чтобы все было выровнено.

Буду очень признателен за любые идеи относительно решения этой головоломки: -)

Ответы [ 3 ]

2 голосов
/ 12 июня 2009

Если вы собираетесь использовать таблицы, вам нужно будет сделать так, как было сказано, и обернуть элемент таблицы элементом формы или поместить его в элемент (ы) td.

В качестве альтернативы вы можете отказаться от таблиц для выравнивания и использовать вместо этого элемент label:

<style type="text/css">
label{
    float: left;
    width: 120px;
    font-weight: bold;
}

input, textarea{
    width: 180px;
    margin-bottom: 5px;
}

textarea{
    width: 250px;
    height: 150px;
}

.boxes{
    width: 1em;
}

#submitbutton{
    margin-left: 120px;
    margin-top: 5px;
    width: 90px;
}

br{
    clear: left;
}
</style>
<form>
<label for="user">Name</label>
<input type="text" name="user" id="user" value="" /><br />
</form>

http://www.cssdrive.com/index.php/examples/exampleitem/tableless_forms/

1 голос
/ 12 июня 2009

<form> следует размещать только внутри <td> или обернуть <table>:

<form><table/></form>
0 голосов
/ 12 июня 2009

Вероятно, элементы tr просто не ожидают от дочерних элементов и что браузер запутывается. Это означает, что если вы поместите тег table в тег form , это должно решить проблему. Если вы не можете этого сделать, потому что вокруг вас разбросаны другие формы, попробуйте вместо этого вложить их в элементы td .

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

Если это все еще не работает, то это может быть связано с тем, как элементы формы обрабатываются в потоке документов. Попробуйте обернуть все это в div и применить переход к нему.

...