0

我正在使用 ng-admin。
根据doc,我创建了一个自定义字段。
ng-admin 识别 FooFiledType 但它不呈现 FoofieldView 并使用原始 FieldView !

配置模块:

angular.module('admin', ['ng-admin']);

import FooField from './FooFieldType';

angular.module('admin')
  .config(['NgAdminConfigurationProvider', function (nga) {
    nga.registerFieldType('foo', FooField);
  }])
  .config(['FieldViewConfigurationProvider', function (fvp) {
    fvp.registerFieldView('foo', require('./FooFieldView'));
  }])
  ;
angular.module('admin').config(['NgAdminConfigurationProvider', function (nga) {
   var bar = nga.entity('bar');
   bar.creationView().fields([nga.field('foo','foo')]);
});

FooField.js:

import Field from 'admin-config/lib/Field/Field';
class FooField extends Field {
  constructor(name) {
    super(name);
  }
}
export default FooField;

FooFieldView.js:

export default {
  // displayed in listView and showView
  getReadWidget   : () => '<ma-number-column field="::field" value="::entry.values[field.name()]"></ma-number-column>',
  // displayed in listView and showView when isDetailLink is true
  getLinkWidget   : () => '<a ng-click="gotoDetail()">' + module.exports.getReadWidget() + '</a>',
  // displayed in the filter form in the listView
  getFilterWidget : () => '<ma-input-field type="number" field="::field" value="values[field.name()]"></ma-input-field>',
  // displayed in editionView and creationView
  getWriteWidget  : () => '<h1>testFoo</h1><ma-input-field type="number" field="::field" value="entry.values[field.name()]"></ma-input-field>'
};
4

1 回答 1

1

文档似乎不完整......但我已将其范围缩小为字段中缺少的“this._type”设置。您需要更改 FooField.js 如下:

....
class FooField extends Field {
  constructor(name) {
    super(name);
    //THIS IS THE IMPORTANT PART:
    this._type = 'foo';
    //DOC DOESN'T SPEAK ABOUT
  }
}
....

当您在 FooField 类中定义_type时,根据类型调用视图并因此呈现。否则,由于我们是从“字段”继承的,因此会呈现字符串视图,并且似乎没有任何效果......

Doc 真的需要更新 :)

于 2016-08-08T21:03:07.717 回答