Нокаут веб-пакет ASP.NET Core MVC гибридных компонентов - PullRequest
0 голосов
/ 05 октября 2018

Я создаю гибридное одностраничное приложение с использованием Knockout и ASP.NET, где представления отображаются на стороне сервера с помощью ядра MVC asp.net.

Я создал проект с предоставленным шаблоном SPA для нокаутаот Microsoft, как указано здесь https://www.dotnetcurry.com/aspnet/1394/aspnet-core-knockout

Он поставляется в комплекте с веб-пакетом, который я изучаю.Существует пользовательский «webpack-component-loader», который, кажется, интегрируется с webpack для извлечения предварительно загруженного представления / viewmodel:

ko.components.loaders.unshift({
    loadComponent: (name, componentConfig, callback) => {
        if (typeof componentConfig === 'function') {
            // It's a lazy-loaded Webpack bundle
            (componentConfig as any)((loadedModule: any) => {
                // Handle TypeScript-style default exports
                if (loadedModule.__esModule && loadedModule.default) {
                    loadedModule = loadedModule.default;
                }

                // Pass the loaded module to KO's default loader
                ko.components.defaultLoader.loadComponent!(name, loadedModule as KnockoutComponentTypes.ComponentConfig, callback);
            });
        } else {
            // It's something else - let another component loader handle it
            callback((null as any) as KnockoutComponentTypes.Definition); // workaround until https://github.com/DefinitelyTyped/DefinitelyTyped/pull/17999
        }
    }
});

Затем компонент регистрируется следующим образом:

export default { viewModel: NavMenuViewModel, template: require('./nav-menu.html') };

Изменение, которое я хочу сделать, заключается в том, чтобы представления отображались на стороне сервера из PartialViews с помощью asp.net MVC.

Я думаю, что мог бы создать новый загрузчик шаблонов компонентов с выбыванием - https://knockoutjs.com/documentation/component-loaders.html#loadtemplatename-templateconfig-callback-и просто сделайте ajax-вызов к маршруту MVC, чтобы сделать это;

export default { viewModel: NavMenuViewModel, template: { mycustomerajaxloader: 'Home/NavMenu'} };

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

Есть ли лучший способчто в полной мере использовать веб-пакет?Особенно хотелось бы, чтобы «Горячая замена модуля» все еще работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...