Я использую машинопись и нокаут.В моем примере я могу создавать плитки и устанавливать транзакции, используя пользовательский редактор кендо, такой как fade in fade out или carousel.На основании таймера, установленного для плитки, будут отображаться данные.Однако, когда я перехожу на другие вкладки, событие таймера пытается найти данные тайла, которые больше не доступны, что приводит к ошибке.Я хочу убедиться, что при переходе на другие вкладки все плитки, имеющие события транзакции, должны быть уничтожены или отменены.Я пытался использовать ko.utils.domNodeDisposal.addDisposeCallback (element, function (), но он никогда не вызывается.
init: (element: any, valueAccessor: any, allBindings: any, viewModel: any, bindingContext: any): void => {
tileState.editableTileInit(element, valueAccessor, viewModel);
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
console.log("I have been called");
});
},
update: (element: any, valueAccessor: any, allBindings: any, viewModel: any, bindingContext: any): void => {
tileState.editableTileUpdate(element, valueAccessor, viewModel);
}
метод init создаст плитки
if (viewModel.editMode() === true) LiveTiles.setupClickHandler(element, viewModel, true);
var sub = viewModel.editMode.subscribe(x => LiveTiles.setupClickHandler(element, viewModel, x));
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
sub.dispose();
TileEditor.destroyEditor(element, viewModel);
LiveTiles.destroyTile(element, viewModel);
});
метод обновления обновитплитки, если пользователь обновляет плитку во время выполнения.
TileEditor.destroyEditor(element, viewModel);
LiveTiles.createTile(element, viewModel);
if (LiveTiles.shouldRecreateClickHandler(viewModel) === true) {
LiveTiles.setupClickHandler(element, viewModel, viewModel.editMode());
}
Окно плитки
Ошибка при переходе на другие вкладки