Добавить пользовательский тип поля в keystone.js

Я пытаюсь добавить скрытый тип поля под названием «admin», который имеет только идентификатор пользователя человека, создающего элемент модели. Это отлично работает локально, но по какой-то причине не работает на сервере. Вот что я сделал, может быть, это потому, что я изменил файл внутри keystone/lib?

/Models/Group.js

var keystone = require('keystone'),
Types = keystone.Field.Types;

/**
 * Group Collection Model
 * =============
 */

var Group = new keystone.List('Group');

Group.add({
  name: { type: String, required: true, initial: true },
    createdAt: { type: Date, default: Date.now },
  groupId: { type: Types.Admin, required: true, initial: true, default: 'placeholder' }
});

Group.defaultColumns = 'name';
Group.register();

/node_modules/keystone/lib/fieldTypes Я добавил admin.js

    /*!
 * Module dependencies.
 */

var util = require('util'),
  utils = require('keystone-utils'),
  super_ = require('../field');

/**
 * Text FieldType Constructor
 * @extends Field
 * @api public
 */

function admin(list, path, options) {
  this._nativeType = String;
  this._underscoreMethods = ['crop'];
  admin.super_.call(this, list, path, options);
}

/*!
 * Inherit from Field
 */

util.inherits(admin, super_);


/**
 * Crops the string to the specifed length.
 *
 * @api public
 */

admin.prototype.crop = function(item, length, append, preserveWords) {
  return utils.cropString(item.get(this.path), length, append, preserveWords);
};


/*!
 * Export class
 */

exports = module.exports = admin;

/node_modules/keystone/lib/fieldTypes/index.js

добавил это:

exports.Admin = require('./admin');

/node_modules/keystone/templates/fields/admin

добавлен шаблон form.jade и initial.jade


person user1572796    schedule 06.08.2014    source источник


Ответы (1)


Когда вы говорите «на сервере», я предполагаю, что вы имеете в виду какого-то хостинг-провайдера Node.js (например, Heroku, OpenShift и т. д.). Если это так, и он работает локально, как вы упомянули, я подозреваю, что вы, возможно, не фиксируете папку node_modules в Git, и поэтому внесенные вами изменения не загружаются вашему провайдеру вместе с остальной частью вашего кода. Проверьте свой файл .gitignore, чтобы увидеть, что там указан файл node_modules. Если это так, удалите node_modules из файла, зафиксируйте и отправьте своему провайдеру, и ваше приложение должно работать с вашим провайдером так же, как и локально.

Тем не менее, в настоящее время я работаю над запросом на включение (#490) в KeystoneJS, который опционально добавит и автоматически обновит createdBy, createdAt, modifiedBy и modifiedAt в модель. В настоящее время мы обсуждаем наилучший способ его реализации, но я подозреваю, что мой PR или его модифицированная версия скоро будет извлечена и доступна в ближайшем будущем.

person JME    schedule 06.08.2014
comment
Да, это было так. Спасибо! Я буду следить за этим PR, отображение данных будет очень полезным. - person user1572796; 06.08.2014
comment
Добро пожаловать! Обновление PR #490. Наконец мы договорились о реализации. Я добавлю новую опцию списка под названием track, которая позволит вам включить createdBy, createdAt, modifiedBy и modifiedAt в ваш список. Поскольку это отличается от моей первоначальной реализации в # 490, я отменил этот PR и отправлю новый в ближайшие день или два. Я опубликую обновление здесь для вашей справки, как только я это сделаю. - person JME; 06.08.2014