Возврат измененного объекта в JavaScript (аналог линз)

Мое предположение: у вас есть интерактивный документ в формате PDF с полями AcroForm, похожими на submit_me.pdf :

enter image description here [/g3]

Главное отличие состоит в том, что у меня есть разные кнопки в форме:

  • POST опубликует данные, которые я заполняю, как если бы PDF был формой HTML,
  • FDF опубликует данные на сервер в Форме данных форм, формат, очень похожий на PDF, но который содержит только пары данных, а не действительную форму,
  • XFDF отправит данные на сервер в Формат данных XML Forms, который является XML-версией формата данных форм.
  • RESET сбрасывает все поля до их начального значения.

SubmitForm пример показывает, как кнопки были добавлены в существующую форму. Обратите внимание, что вариантов больше, чем описанных в этом примере.

Например:

  • Вместо использования метода POST вы также можете использовать GET, настроив некоторые из параметры,
  • Вы также можете отправить полный PDF (данные + форму) на сервер, но это будет работать, только если у конечного пользователя есть Adobe Acrobat в качестве подключаемого модуля. Это не будет работать, если плагин - это просто Adobe Reader,
  • ...

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

В случае POST:

personal.loginname=jdoe&personal.name=John+Doe&personal.password=test&personal.reason=reason&post.x=29&post.y=7

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

В случае FDF:

%FDF-1.2
%âãÏÓ
1 0 obj
<><><><><>]/T(personal)>>]/ID[<1205D069D1D6AE37665B6FF7EEA65414>]>>/Type/Catalog>>
endobj
trailer
<>
%%EOF

В случае XFDF:


jdoeJohn DoetestReason

В идеальном мире, это было бы вашим решением. Он описан в ISO-32000-1, который является всемирным стандартом для PDF. Тем не менее: многие люди начали использовать дерьмовые средства просмотра PDF, которые не поддерживают эту функциональность, поэтому, если вы хотите использовать это решение, вам нужно будет убедиться, что люди используют достойный просмотрщик PDF в качестве своего браузера.

1
задан Jivan 3 March 2019 в 15:24
поделиться

3 ответа

Другой альтернативный способ:

let newObj = JSON.parse(JSON.stringify(oldObj))
0
ответ дан Kubwimana Adrien 3 March 2019 в 15:24
поделиться

Вы можете попробовать использовать синтаксис распространения

var myObject = {
  label: 'Table',
  options: ['legs'],
  params: {
    colour: 'red',
    feet: {
      colour: 'white',
      shape: 'round'
    }
  }
}

function newObject(obj) {
  // sought-after syntax here
return ({...obj,params:{...obj.params,colour:"green",feet: {...obj.params.feet,shape:"square"}}})
}

console.log(newObject(myObject))

0
ответ дан Maheer Ali 3 March 2019 в 15:24
поделиться

Без вложения, который можно легко сделать с помощью Object.assign:

Object.assign({}, obj, { label: "New One" })

или с помощью расширения объектов:

{ ...obj, label: "New One" }

для поддержки вложенных объектов / массивов, вы должны вручную объединить объекты рекурсивно:

 function merge(target, changes) {
   const result = {};

   for(const [key, value] of Object.entries(target).concat(Object.entries(changes))) {
     if(Array.isArray(value)) {
       // TODO
     } else if(typeof value === "object") {
       result[key] = merge(result[key] || {}, value);
     } else {
       result[key] = value;
     }
   }

   return result;
}
0
ответ дан Jonas Wilms 3 March 2019 в 15:24
поделиться
Другие вопросы по тегам:

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