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

时间:2015-10-06 15:56:37

标签: javascript ipython ipython-notebook jupyter

在IPython3中我的' custom.js'正在听这个事件:

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

在看了this post之后,我正在聆听笔记本电脑上的笔记本电子书'事件

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

但我正在使用' app初始化'事件做一些事情,包括隐藏标题,即:

$('#header').hide()

现在,有了这个事件,它隐藏起来,但是在短暂的展示之后...... 我认为在笔记本加载之前有一个事件,就像在IPython3笔记本中一样

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

在应用初始化时是否还有任何事件被触发?

谢谢,

1 个答案:

答案 0 :(得分:2)

出于某种原因,当您使用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事件来说可能为时已晚。