Универсальный способ заполнить форму в JavaScript

Это безумие - сначала использовать статическое соединение с базой данных :) Идея вашего дизайнера была очень плохой в отношении статического подхода. Я думаю, что архитектура NTiear была хорошим способом начать с этого. Возможно, в будущем вашей новой проблемой станет масштабируемость вашей системы БД. Возможно, вы используете вертикальное масштабирование. Если это правильно, вы должны применить распределенный подход к системе БД, например, репликацию и разделение. Также решение nosql может иметь другой вариант. Я искал эту тему в прошлом году, и я написал документ, который вы можете увидеть на medium

И еще один вопрос о monolotihc vs. microservice. Вы можете найти много статей на средних и т. Д. Вот один из из них .

Кроме того, я опубликовал пример проекта на github о N-Tier-Architecture-with-Generic-Repository - Dependency-Injection-And-Ninject

, который вы можете изучить

Удачи;)

8
задан 3 revs, 2 users 100% 28 December 2011 в 13:53
поделиться

4 ответа

При использовании Прототипа это легко. Во-первых, можно использовать toQueryParams метод на Строковом объекте получить объект JavaScript с парами имя/значение для каждого параметра.

Во-вторых, можно использовать Форму. Метод Elements.setValue (кажется, не документируется) переводить каждое значение строки запроса в фактическое состояние ввода формы (например, проверять флажок, когда значение строки запроса "включено"). Используя метод имени value=value только работает на текст и выбор (один, не многие) исходные данные. Используя Прототип метод добавляет поддержку флажка, и выберите (несколько) исходные данные.

Что касается простой функции для заполнения, что Вы имеете это работает хорошо, и она не является сложной.

function populateForm(queryString) {
    var params = queryString.toQueryParams();
    Object.keys(params).each(function(key) {
        Form.Element.setValue($("someform")[key], params[key]);
    });
}

Это использует Object.keys и каждого методы, чтобы выполнить итерации по каждому параметру строки запроса и установить вход формы соответствия (использующий входной атрибут имени) к совпадающему значению в объекте параметрических усилителей запроса.

Править: Обратите внимание, что у Вас не должно быть идентификационных атрибутов на Ваших элементах формы для этого решения работать.

6
ответ дан 5 December 2019 в 17:42
поделиться

Попробуйте это:

Event.observe(window, 'load', function() {
  var loc = window.location.search.substr(1).split('&');

  loc.each(function(param) {
      param = param.split('=');
      key = param[0];
      val = param[1];

      $(key).value = val;
  });
});

Вышеупомянутый код предполагает присвоение значений идентификаторов, а также имен к каждому элементу формы. Это берет параметры в форме:

?key=value&key=value

или

?option1=1&option2=2

Если Вы хотите сохранить его в просто названиях элементов, то попробуйте вместо вышеупомянутого:

Event.observe(window, 'load', function() {
  var loc = window.location.search.substr(1).split('&');

  loc.each(function(param) {
    param = param.split('=');
    key = param[0].split('_');

    type = key[0];
    key = key[1];
    val = param[1];

    $$(type + '[name="' + key + '"]').each(function(ele) {
      ele.value = val;
    });
});

Этот код берет параметры в форме:

?type_key=value&type_key=value

или

?select_option1=1&select_option2=2
3
ответ дан 5 December 2019 в 17:42
поделиться

Вы сказали, что уже проходите элементы и устанавливаете значения. Однако, возможно, это более чисто это, что Вы имеете?

function setFormSelectValues(form, dataset) {
    var sel = form.getElementsByTagName("select");
    dataset.replace(/([^=&]+)=([^&]*)/g, function(match, name, value){
        for (var i = 0; i < sel.length; ++i) {
            if (sel[i].name == name) {
                sel[i].value = value;
            }
        }
    });                
}

Вы могли затем адаптировать это к больше, чем просто избранным элементам в случае необходимости.

1
ответ дан 5 December 2019 в 17:42
поделиться

Три строки кода в prototype.js:

$H(query.toQueryParams()).each(function(pair) {
    $("form")[pair.key].setValue(pair.value);
});
0
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: