Monaco Editor系列(十)createContextKey 创建响应式变量

前言:上一章学习了 monaco 中创建自定义 dom 的另一种方法 changeViewZones 。这个方法接受一个回调函数作为参数,这个回调函数的参数上面拥有我们需要的方法 addZone layoutZone removeZone,这几个方法都只能在 changeViewZones 内部执行。其中 addZone 方法需要接收一个 Zone 类型的对象,描述新创建的自定义 dom 的各种信息。
这一章学习的是一个创建”响应式变量“的方法,响应式是我自封的,感觉有点像,createContextKey。在 example-interacting-with-the-editor-adding-a-command-to-an-editor-instance 示例里有使用到。
createContextKey 方法是用来创建变量的,这个变量的值可以在后续的操作中动态修改。

createContextKey<T extends ContextKeyValue = ContextKeyValue>(key: string, defaultValue: T): IContextKey<T>;

接收两个参数
参数一:字符串,表示变量的key值
参数二:默认值,数据类型可以是任何的数据类型
返回值是 IContextKey

export interface IContextKey<T extends ContextKeyValue = ContextKeyValue> {
    set(value: T): void;
    reset(): void;
    get(): T | undefined;
}

set 方法设置值,reset 方法重置,回到原始的默认值,get 方法获取值

在使用 createContextKey 定义变量之后,依赖变量的操作就可以直接填变量的key,类似于数据绑定,变量后续再变化的话,依赖于变量的值也会自动变化。

在官网给的这个例子里面,是给编辑器增加一个命令,这个命令的触发可能会有一些条件限制,所以 addCommand 的第三个参数,就是使用createContextKey 方法定义的数据,当第三个参数的值为 true 的时候,才会添加这个命令

var myCondition1 = editor.createContextKey(
	/*key name*/ "myCondition1",
	/*default value*/ false
);
var myCondition2 = editor.createContextKey(
	/*key name*/ "myCondition2",
	/*default value*/ false
);

editor.addCommand(
	monaco.KeyCode.Tab,
	function () {
		// services available in `ctx`
		console.log("my command is executing!");
	},
	"myCondition1 && myCondition2"
);

addCommand 的定义:

addCommand(keybinding: number, handler: ICommandHandler, context?: string): string | null;

最后一个参数 context 其实就是 createContextKey() 方法定义的变量的 key 值,并且还能使用运算符比较厉害,并不是单纯的根据这个key去找 value,找到之后还能计算一波。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值