Не удается обновить редактируемую сетку в расширении портала Azure.

Я разрабатываю расширение портала Azure, включающее редактируемую колонку сетки. Блейд сетки открывается из селектора и, следовательно, содержит поставщик параметров.

Сетка инициализируется с областью редактирования поставщика параметров, которая представляет собой наблюдаемый массив, и включается для редактирования строк и вставки новых строк.

Когда я пытаюсь обновить сетку, изменения в существующих строках не отображаются, а создание новой строки дает пустую строку, как показано ниже:

Пустая строка при добавлении новой строки

Я не вижу никаких ошибок в консоли во время отладки.

Вот как я инициализировал сетку:

private _initialize(container: MsPortalFx.ViewModels.PartContainerContract): void {
    var extensions: number = MsPortalFx.ViewModels.Controls.Lists.Grid.Extensions.EditableRow | MsPortalFx.ViewModels.Controls.Lists.Grid.Extensions.ContextMenuShortcut,
        extensionsOptions: MsPortalFx.ViewModels.Controls.Lists.Grid.ExtensionsOptions<DataModels.IItem, DataModels.ISelectionItem>,
        viewModel: MsPortalFx.ViewModels.Controls.Lists.Grid.ViewModel<DataModels.IItem, DataModels.ISelectionItem>;

    // Set up the editable extension options.
    extensionsOptions = this._createExtensionsOptions();

    // Create the grid view model.
    viewModel = new MsPortalFx.ViewModels.Controls.Lists.Grid.ViewModel<DataModels.IItem, DataModels.ISelectionItem>(
        container,
        null,
        extensions,
        extensionsOptions);
    viewModel.showHeader = true;
    viewModel.columns(this._columns);
    viewModel.rowAdd = () => {
        // code that extension authors need to execute when a row is added should go here.
    };
    this.editableGrid = viewModel;
}

private _createExtensionsOptions(): MsPortalFx.ViewModels.Controls.Lists.Grid.ExtensionsOptions<DataModels.IItem, DataModels.ISelectionItem> {
    return <MsPortalFx.ViewModels.Controls.Lists.Grid.ExtensionsOptions<DataModels.IItem, DataModels.ISelectionItem>>{
        editableRow: {
            // Supplies editable items to the grid.
            editScope: this.parameterProvider.editScope,
            // put the new row at the top.
            placement: MsPortalFx.ViewModels.Controls.Lists.Grid.EditableRowPlacement.Bottom,
            // Create no more than 5 new rows.
            maxBufferedRows: 5,
            // Allow the modification of existing items.
            allowEditExistingItems: true,
            // Allow the creation of new items.
            allowEditCreatedItems: true,
            // Track the valid status
            valid: ko.observable<boolean>()
        }
    };
}

Я просмотрел несколько образцов лезвий редактируемой сетки, но не смог определить, что я делаю неправильно.


person yonisha    schedule 09.07.2016    source источник


Ответы (1)


Проблема заключалась в том, что я не установил свойство editScopeMetadataType поставщика параметров, которое требуется для определения типа объекта области редактирования:

this.parameterProvider = new MsPortalFx.ViewModels.ParameterProvider<DataModels.IItem[], KnockoutObservableArray<DataModels.SchemaItem>>(container, {

    // This was missing.
    editScopeMetadataType: wrapperTypeMetadataName,

    mapIncomingDataForEditScope: (incoming) => {
        return ko.observableArray(incoming);
    },

    mapOutgoingDataForCollector: (outgoing) => {
        return outgoing();
    }
});
person yonisha    schedule 11.07.2016