Добавить форму альпакайса к существующей форме

Я пытаюсь создать средство расчета ввода пользователя, где поля ввода и формула расчета устанавливаются динамически. Например, есть Количество яблок и Цена для одного яблока, поэтому я умножаю входы, чтобы получить цену. В другом случае у меня есть длина, ширина и высота для расчета объема.

Я решил сохранить входные данные, данные и функцию расчета и собрать форму json с Alpacajs

Но поля вычислений - только часть большей формы. Итак, используя

$("#alpacaForm").alpaca(window.alpacaForm.object);

добавляет новую форму внутри alpacaForm элемент.

Есть ли способ добавить поля, сгенерированные alpacajs, к существующей форме?

1 ответ

Единственный способ, которым мне удалось это сделать, - рендеринг в отдельный элемент и копирование элементов поверх.

Например:

<form id="my-form">

  <!-- My controls: -->
  <label for="foo">Foo</label>
  <input id="foo">

  <label for="bar">Bar</label>
  <input id="bar">

  <!-- I want the schema-based controls to go into this div. -->
  <div class="schema-control-container"></div>

</form>

JavaScript (и jQuery):

var $myForm = $('#my-form');
var $schemaControlContainer = $myForm.find('.schema-control-container');
var mySchema = JSON.parse(mySchemaJson);

var $scratchpad = $('<div id="alpacaScratchpad"></div>').hide().
    insertAfter($myForm);

function postRender (control) {

  // I actually have multiple forms, so I need to make sure the IDs are unique.
  $scratchpad.find('.alpaca-control').each(function (i, alpacaControl) {
    alpacaControl.id = $myForm.attr('id') + '-' + alpacaControl.id;
  });
  $scratchpad.find('.alpaca-control-label').each(
      function (i, alpacaControlLabel) {
    alpacaControlLabel.htmlFor = $myForm.attr('id') + '-' +
        alpacaControlLabel.htmlFor;
  });

  // Select elements we want to copy. Note that I haven't tried this with any
  // particularly complicated JSON schemata, so this may be naïve.
  var $goodies = $scratchpad.find('.alpaca-control,.alpaca-control-label');

  // Optional: mark schema controls as such, and allow autocompletion.
  $goodies.filter('.alpaca-control').addClass('my-schema-datum').
      attr('autocomplete', null);

  // Remove Alpaca classes and Bootstrap crap. (I hate Bootstrap, but the 'web'
  // version of Alpaca doesn't seem to work right now. TODO: Update after
  // https://github.com/gitana/alpaca/issues/507 is fixed.)
  $goodies.removeClass('alpaca-control').removeClass('alpaca-control-label').
      removeClass('form-control').removeClass('control-label');

  // Move the goodies to the schema control container, in the form.
  $schemaControlContainer.append($goodies);

  // Clean up the clutter we don't need.
  $scratchpad.empty();
}

// Have Alpaca render the schema into the scratchpad, and then run the function
// we just defined.
$scratchpad.alpaca({ schema: mySchema, postRender: postRender });

Я надеялся найти вариант альпаки, чтобы избежать необходимости делать все это, но, похоже, его нет.

Другие вопросы по тегам