IPython 3 到 Jupyter 迁移,custom.js 和事件

IPython 3 to Jupyter migration, custom.js and events

在 IPython3 我的 'custom.js' 正在监听事件 :

$([IPython.events]).on("app_initialized.NotebookApp", function() { ... })

查看 this post 后,我正在监听 'notebook_loaded.Notebook' 事件。

require(['base/js/namespace', 'base/js/events'], function(IPython, events) {
  events.on('notebook_loaded.Notebook', function() { ... });
});

但我使用 'app initialized' 事件来做一些事情,包括隐藏 header,即:

$('#header').hide()

现在,对于这个事件,它是隐藏的,但只是在短暂显示之后... 我认为在笔记本加载之前有一个事件,就像 IPython3 笔记本

我没有找到关于这些事件的任何文档..

在应用程序初始化时是否仍有任何事件触发?

谢谢,

由于某些原因,当您使用 require('base/js/events') 函数时,您无法监听 app_initialized.NotebookApp 事件。

如果您查看笔记本 static/notebook/js/main.js 代码,app_initialized.NotebookApp 事件仍会触发。

但是你必须使用 requireJS 中的 define() 函数来监听这个事件:

define([
  'base/js/namespace',
  'base/js/events'
], function(IPython, events) {
   events.on('app_initialized.NotebookApp', function() {
     // Your Code
   });
});

此处将执行您的回调。

如果你输入 custom.js :

 require(['base/js/namespace', 'base/js/events'], function(IPython, events) {
     events.on('notebook_loaded.Notebook', function() {
        console.log('require & notebook_loaded.Notebook');
    });
     events.on('app_initialized.NotebookApp', function() {
        console.log('require & app_initialized.NotebookApp');
     });
 });

 define(['base/js/namespace', 'base/js/events'], function(IPython, events) {
     events.on('notebook_loaded.Notebook', function() {
        console.log('define & notebook_loaded.Notebook');
    });
     events.on('app_initialized.NotebookApp', function() {
         console.log('define & app_initialized.NotebookApp');
     });
 });

控制台中的结果将是:

define() & app_initialized.NotebookApp
define() & notebook_loaded.Notebook
require() & notebook_loaded.Notebook

我想您使用 require() 注册了一个已经发生的事件...

require() 正在等待初始化所有依赖项和子模块...这对于 app_initialized.NotebookApp 事件来说可能为时已晚。