Quantcast
Channel: Developer to developer
Viewing all articles
Browse latest Browse all 9076

postCreate method wasn't called after page load

$
0
0

Hi,

I've created my own widget 

define(["dojo/_base/declare","dojo/_base/connect","dojo/_base/lang","dojo/query","dojo/_base/array","dojo/_base/window","epi-cms/contentediting/editors/SelectionEditor","dijit/_Widget","dijit/_TemplatedMixin","dijit/_WidgetsInTemplateMixin","dojo/text!./Templates/TwoAreas.html"
], function (declare, connect, lang, query, array, window, selectionEditor,
    _Widget, _TemplatedMixin, _WidgetsInTemplateMixin, template) {
    return declare("epi-gadgets.MultiSelect.TwoAreas",
    [_Widget, _TemplatedMixin, _WidgetsInTemplateMixin], {
        templateString: template,
        items: null,
        initialValue: null,
        //1
        constructor: function (value) {
            //this.inherited(arguments);
            this.items = value.selections;
            this.initialValue = value.value;
        },
        readOnlyAttr: false,
        //2
        _setValueAttr: function(value) {
            this.setValue(value);
        },
        _setReadOnlyAttr: function(value) {
            this._set("readOnly", value);
            this.readOnlyAttr = value;
        },
        //startup: function() {
        //    this.postCreate();
        //},
        //3
        postCreate: function () {
            // call base implementation            
            this.inherited(arguments);
            for (var i = 0; i < this.items.length; i++) {
                if (this.initialValue && this.initialValue.includes(this.items[i].value)) {
                    this._addOption(this.items[i].value, this.items[i].text, this.selectedOptions);
                } else {
                    this._addOption(this.items[i].value, this.items[i].text, this.availableOptions);
                }
            }
            this.selectButton.setDisabled(this.readOnlyAttr)
            this.removeButton.setDisabled(this.readOnlyAttr)
            this.availableOptions.setDisabled(this.readOnlyAttr)
            this.selectedOptions.setDisabled(this.readOnlyAttr)
        },
        selectionChanged: function (object) {
            var value = this._getValue();
            this._set("value", value);
        },
        addOptions: function (value) {
            var selectedOptions = this._getSelectedValues(this.availableOptions);
            for (var i = 0; i < selectedOptions.length; i++) {
                this._addOption(selectedOptions[i].value, selectedOptions[i].innerHTML, this.selectedOptions);
                this.availableOptions.containerNode.removeChild(selectedOptions[i]);
            }
            this.selectionChanged();
        },
        removeOptions: function (value) {
            var selectedOptions = this._getSelectedValues(this.selectedOptions);
            for (var i = 0; i < selectedOptions.length; i++) {
                this._addOption(selectedOptions[i].value, selectedOptions[i].innerHTML, this.availableOptions);
                this.selectedOptions.containerNode.removeChild(selectedOptions[i]);
            }
            this.selectionChanged();
        },
        _addOption: function (value, text, multiSelect) {
            var option = window.doc.createElement('option');
            option.innerHTML = text;
            option.value = value;
            multiSelect.domNode.appendChild(option);
        },
        _getValue: function () {
            var result = "";
            var addedValues = [];
            var selectedOptions = query("option", this.selectedOptions.containerNode);
            for (var i = 0; i < selectedOptions.length; i++) {
                if (array.indexOf(addedValues, selectedOptions[i].value) != -1) {
                    continue;
                }
                if (i != 0) {
                    result = result + ",";
                }
                result = result + selectedOptions[i].value;
                addedValues[addedValues.length] = selectedOptions[i].value;
            }
            return result;
        },
        _getSelectedValues: function (multiSelect) {
            var result = [];
            var processedValues = [];
            var selectedOptions = query("option", multiSelect.containerNode);
            for (var i = 0; i < selectedOptions.length; i++) {
                if (selectedOptions[i].selected) {
                    if (array.indexOf(processedValues, selectedOptions[i].value) != -1) {
                        continue;
                    }
                    var selectedOptionsByValue = query("option[value=\"" + selectedOptions[i].value + "\"]", multiSelect.containerNode);
                    for (var j = 0; j < selectedOptionsByValue.length; j++) {
                        result[result.length] = selectedOptionsByValue[j];
                    }
                    processedValues[processedValues.length] = selectedOptions[i].value;
                }
            }
            return result;
        },
        setValue: function (value) {
            if (!value) {
                return;
            }
            var options = value.split(",");
            for (var i = 0; i < options.length; i++) {
                var optionsWithValue = query("option[value=\"" + options[i] + "\"]", this.availableOptions.containerNode);
                for (var j = 0; j < optionsWithValue.length; j++) {
                    this._addOption(optionsWithValue[j].value, optionsWithValue[j].innerHTML, this.selectedOptions);
                    this.availableOptions.containerNode.removeChild(optionsWithValue[j]);
                }
            }
        }
    });
});

I am using 'all properties view' as default for all pages and blocks. Application uses EPiServer 7.18

If I select page with my widget than episerver doesn't open all properties view but switch button set to 'all properties view'.

If I change view to 'On-Page editing' and than return to 'All properties' episerver shows properties and my widget.

During debuging I've find out that episerver always calls constructor from my widget after open page but doesn't call postCreate method

 

I hope someone faced with similar issue


Viewing all articles
Browse latest Browse all 9076

Trending Articles