ICN 3.0.x - Невозможно обновить ширину пользовательского редактора.

Следуя этому классному руководству " Не только место ECM", я намеревался написать собственный редактор, содержащий несколько элементов и поле, связанное со свойством. Этот пользовательский редактор будет установлен через плагин ICN.

Соответствующие файлы здесь:

  • Файл плагина, который будет регистрировать плагин (в глобальном ControlRegistry объект ICN)
  • Пользовательский файл JavaScript редактора, который будет расширять как пользовательский виджет, так и _EditorMixin класс, который отображает виджет в собственность
  • Пользовательский Javascript-файл Widget с HTML-шаблоном Dojo

Ниже сделана попытка изменить ширину редактора. В коде регистрации редактора я использовал DimensionSetting и попытался переопределить onSettingChanged(), чтобы изменить размер виджета редактора:

require([ /* [...] */],
        function(lang, ) {
            var editorId = "theWannaBeResizeableEditor";
            ControlRegistry.editors.editorConfigs[editorId] = {
                label: "A dummy label",
                editorClass: AWannaBeResizeableEditor,
                settings:
                [
                    {
                        name: "width",
                        controlClass: DimensionSetting,
                        controlParams: {
                            label: resources.styleSettingsLabel.width,
                            help: resources.styleSettingsHelp.width
                        },
                        defaultValue: "100%",
                        // And here begins the problem...
                        onSettingChanged: function(helper, width) {
                            // Tried to resize the Widget : FAIL
                        }
                    } // [...]
                ]
            }
        });

Я пробовал, среди прочего, эту реализацию:

onSettingChanged: function(helper, width) {
  helper.updateSetting("width", width);
  helper.widget._adjustSizing && helper.widget._adjustSizing();
  helper.widget.view.resize();
}

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

1 ответ

Отказ от ответственности: я написал аналогичный ответ в другом месте.

После множества поиска, grep, less (я настоятельно советую установить Cygwin для такого рода исследований, это действительно помогает). Я понял, что стандартные виджеты настроек редактора опираются на TextBoxEditorSettings сделать их ширину обновляемой. Этот виджет можно найти здесь: pvd/widget/editors/settings/TextBoxEditorSetting.js

Ассоциация между TextBoxEditorSettings а также TextBox редактор можно найти в pvd/widget/registry/BasicHelperConfiguration.js:

define(
    [/* [...] */],
    function (declare,
          /* [...] */,
          textBoxEditorSettings,
          /* [...] */) {
        return {
            editors: {
                editorConfigs: {
                    // [...]
                    "textBox": {
                        settings: textBoxEditorSettings
                    } // [...]
                }
            }
        }
     }
);

Вместо того, чтобы настраивать редактирование конфигурации ширины с нуля, я попытался использовать повторно TextBoxEditorSettings и расширить его.

Если нам нужно добавить другие настройки (текст и т. Д.). мы не должны добавлять их непосредственно к TextBoxEditorSettings иначе все редакторы, настроенные с его помощью, тоже получат эти настройки, особенно TextBox что не то, что мы хотим. Вместо этого мы будем использовать мелкую копию, вызывая slice(),

require(
    [
        "dojo/_base/lang",
        "ecm/model/configuration/ControlRegistry",
        // [...] Include below all the settings editor you need
        "pvd/widget/editors/settings/TextBoxEditorSettings",
        // Below your custom template
        "AWannaBeResizeableEditorPluginDojo/editors/AWannaBeResizeableEditor",
        // Below for translation support of TextBoxEditorSettings
        "dojo/i18n!pvd/nls/common"
    ],
    function(lang, ControlRegistry, TextBoxSetting,
             TextBoxEditorSettings, AWannaBeResizeableEditor,
             resources) {
        var editorId = "aWannaBeResizeableEditor";

        // Perform a shallow copy to avoid conflicts
        var editorSettings = TextBoxEditorSettings.slice();

        // Additional setting editors
        // Repeat this block for all further setting editor needed
        /// 1. Definition
        var anotherSettingEditor = {
            // [...]
        };
        /// 2. Insertion
        editorSettings.unshift(anotherSettingEditor);
        /// End of this block

        // Registration in the editor configurations...
        ControlRegistry.editors.editorConfigs[editorId] = {
            label: "A Wannabe Resizable Editor",
            editorClass: AWannaBeResizeableEditor,
            settings: editorSettings
        }

        // Registring the widget in the right mapping type
        // [...]
    }
);

Затем напишите свой шаблон, чтобы сделать его максимально легко изменяемым. Я разработал его для изменения размера редактора с верхнего узла. Я назвал точку присоединения верхнего узла oneuiBaseNode так что нет необходимости переопределять adjustWidth(), а также resetWidth(),

<div class="searchBoxFillerWidget"
     data-dojo-attach-point="oneuiBaseNode">
    <!--
         Write here HTML code relatively resizeable
         to the top node.
    -->
</div>
Другие вопросы по тегам