2017-01-25 14 views
0

Кажется простой задачей, но я не вижу ничего, что показывает, как динамически добавлять поле к модели в keystone.js. Например, у меня есть модель «Животное» и что животное может принадлежать произвольному числу «мест обитания». Я хотел бы иметь возможность перейти в модели Animal и создать кнопку Assign Habitat, которая создаст новое поле, которое будет связывать Animal с Habitat столько раз, сколько необходимо.Динамическое добавление поля в модель Keystonejs и Mongodb

ответ

0

Я думаю, что это, возможно, еще не внесло его в документацию, но то, что вы хотите, является встроенным отношением к модели Habitats.

Если определить модель местообитаний, как обычно, а затем ваша животная модель должна включать в себя что-то вроде:

Animal.add({ 
    fieldA: { type: Types.Relationship, ref: 'Habitat', createInline: true }, 
}); 
+0

спасибо. Это полезно, но мне все еще нужно жестко кодировать количество полей. Я сделал другой подход, когда я генерирую поля из функции. 'Habitat.add ( function (_animal) {...});' Не хотел вставлять все это, но в основном это выглядит в Животные, чтобы определить, сколько полей необходимо создать. Это работает, за исключением того, что оно генерирует только количество животных при компиляции. Если я запустил сервер и добавлю новое животное, он не будет добавлен в среду обитания, потому что среда обитания уже скомпилирована. Есть ли способ перекомпилировать модель всякий раз, когда страница создания загружается в admin ui? – willjfield

+0

Ах, если вы добавите «many: true» в мой пример, вы сможете добавить столько животных, сколько захотите, только в одном поле. Извините, я забыл об этом в своем первоначальном ответе. В модели среды обитания вы можете сделать так, чтобы вы могли видеть отношения с другой стороны (I.e. просмотреть всех животных, назначенных для среды обитания, которую вы просматриваете). Это то, что вы ищете? –

+0

Спасибо. Это очень полезно. В идеале, хотя я хотел бы заполнить страницу пользовательского интерфейса Habitats admin с булевым флажком для каждого существующего животного. Это будет в основном делать то же самое, что и раскрытие ссылок, но может быть немного более читаемым, если бы были флажки. Я написал функцию, чтобы сделать это в моей модели Habitat, но она обновляется только с новыми животными, когда запускается сервер трапецеидальных искажений, а не каждый раз, когда загружается страница пользовательского интерфейса администратора, поэтому она не обновляется. Если вытащить это, требуется много углубленного поиска с Keystone, я могу просто пойти с раскрывающимся списком отношений. – willjfield

0

Хорошо, так что я в конечном итоге делает настраивал трапецеидальных RESTful API и с использованием 3 запросов AJAX, что запустить на странице среды обитания.

Ajax запрос # 1 - GET имена всех животных и использовать JQuery для создания дивы с флажками для каждого один

АЯКС запрос # 2 - PATCH элемент среды обитания со строкой, содержащей идентификатор каждого проверяемого животных для этой среды обитания

запрос Ajax # 3 - GET, которые ранее были выбраны для среды обитания и предварительно проверить их коробки активных животных при загрузке страницы

что это делает динамически создать флажок для каждого существующего животного на странице с открытыми страницами места обитания. Проверка флажка для животных связывает его с открытой средой обитания. Это сохраняется как строка, созданная для модели среды обитания.