Есть ли канонический пакет meteor.js?

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

В моих поисках я придумал двух основных претендентов, основанных на активности, бесперспективности и документации (но могут быть и другие):

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

Ответы

Ответ 1

Поскольку на это не было ответа, я буду перебирать аргумент "почему вы должны сделать это самостоятельно".

Форма представляет собой как отображение DOM, так и проверку. Я думаю, что инструменты Meteor для обоих достаточно хороши, чтобы не требовать от них другой абстракции.

Подумайте, что дает вам метеорит: вы можете написать класс для своих объектов, который сам понимает все проверки и правила. Не в родовом, "должно быть несколько способов", но так же сложно, как они существуют (должно быть простое число?). Вы можете написать этот класс, и он может работать как на клиенте, так и на сервере. Вы всегда должны проверять как на клиенте, так и на сервере. Библиотеки проверки возникли из-за того, что клиент и сервер были (по крайней мере) двумя разными языками. Node/Метеор везде JS.

Почему бы не использовать эту замечательную функцию? Не ставьте код проверки в несколько мест. Дайте свои данные вашему объекту, позвольте ему принять или отклонить его на клиенте (и на сервере).

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

Форма

{{label_text fname='name' title='Agent Name' placeholder='Formal Name' collection='agent'  passthrough='autofocus=autofocus ' }}
{{label_text fname='agentInCharge' title='Agent In Charge' placeholder='Owner' collection='agent'   }}
{{label_text fname='phone' title='Phone Number(s)' placeholder='Include Area  Code'collection='agent'   }}
{{>gps }}

Шаблон

<template name='label_text'>
    <div class="row">
        <label class="large-3" for="{{fname}}_{{_id}}">{{title}}</label>
        <div class="large-8">
            <input name="{{fname}}" 
                   id='{{fname}}_{{_id}}' 
                   class="{{fname}}" 
                   value="{{value}}"
                   data-original="{{value}}" 
                   placeholder="{{placeholder}}" 
                   type="{{type}}" {{passthrough}}  />
        </div>
    </div>
</template>

и несколько помощников:

generateField = (options) ->
  options.hash.value = options.hash.value or this[options.hash.fname]

  # allow for simple params as default
  options.hash.title = options.hash.title or options.hash.fname
  options.hash.template = options.hash.template or "label_text"
  options.hash.placeholder = options.hash.placeholder or options.hash.title
  options.hash.type = options.hash.type or 'text'

  new Handlebars.SafeString(Template[options.hash.template](options.hash))



Handlebars.registerHelper "label_text", (options) ->
  options.hash.collection = options.hash.collection or 'generic'  
  generateField.call this, options

Handlebars.registerHelper "label_text_area", (options) ->
  options.hash.collection = options.hash.collection or 'generic'
  options.hash.template = "label_text_area"
  options.hash.rows = options.hash.rows or 3
  options.hash.columns = options.hash.columns or 40
  generateField.call this, options

Handlebars.registerHelper "switch", (options) ->
  options.hash.template = "switch"
  options.hash.em = options.hash.em || 7
  generateField.call this, options

Затем я отправляю данные клиенту, чтобы посмотреть, что он думает.

Ответ 2

В настоящий момент нет канонического пакета (Meteor v1.0), кажется, что проблема останется в сообществе (см. roadmap).

Я также добавлю joshowens: simple-forms в ваш список, минимальный пакет (потому что мне нравится свобода, которую он дает)

Я не пробовал Mesosphere, поэтому я не могу сравнивать, но я считаю aldeed: autoform получил намного больше тяги. Судя по звездам github и атмосферы, это самый популярный на сегодняшний день. Я считаю, что основной причиной является его большая интеграция с коллекциями2 (автоматические вставки, обновления и т.д.).

Ответ 3

FWIW, мы используем autoform и collection2.