Пытаюсь понять эпизод Railscast 197 (связанный с предыдущим постом: #17094200)

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

function add_fields(link, association, content) {
    var new_id = new Date().getTime();
    var regexp = new RegExp("new_" + association, "g")
    $(link).parent().before(content.replace(regexp, new_id));
}

Я понимаю первую строчку (var new_id=...) и зачем она нужна, но что делает вторая строчка, и как работает замена id?

Я спрашиваю, потому что в моем приложении при нажатии «add_new_row» новая строка вставляется вверху моей страницы, а не в таблице, к которой она принадлежит.

Спасибо за любую помощь, которую вы можете предложить.


person user1904869    schedule 14.06.2013    source источник


Ответы (1)


Линия

    var regexp = new RegExp("new_" + association, "g")

просто создает объект RegExp, представляющий подходящий шаблон. (Внутренне он «компилирует» шаблон, так что, например, если бы он неоднократно сопоставлялся, он сделал бы все, что нужно, только один раз заранее, чтобы последующие использования были более эффективными.) "g" флаг, обозначающий «глобальный», что означает «Заменить все совпадения». Я не уверен, что такое association, но этот шаблон будет соответствовать "new_<association>".

Следующая строка

$(link).parent().before(content.replace(regexp, new_id));

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

person slackwing    schedule 14.06.2013
comment
Спасибо Андрей - помогло. Переменная ассоциации — это имя моей подмодели — например, у меня может быть модель для заказов, в которой может быть много статей расходов — в этом случае связь будет строкой, содержащей имя LineItems. Мне также нужно было изменить следующую строку на это: - person user1904869; 17.06.2013
comment
$(.DataRow).after(content.replace(regexp, new_id)); Это помещает вставленную строку после моей последней строки данных. Теперь эта часть работает так, как я задумал. Мне все еще нужно проработать некоторые функции рельсов, чтобы это работало, когда пользователь щелкает ссылку, а не когда страница загружается. - person user1904869; 17.06.2013