这个问题与Javascript事件处理和流量控制有关,但它只是一步之遥.仍然没有答案的问题是:当一个事件被触发并且控制权返回给浏览器时,浏览器是否可以决定首先处理其他事件(由其他脚本或用户操作触发)(A),或者它总是直接处理我的事件(B)?
这个问题很重要,因为在情况(B)中你可以依赖于在触发事件和事件处理程序之间没有任何改变的事实,而(A)不给出任何保证.
我的第一个猜测是(B),还有什么可以stopPropagation()和preventDefault()工作?但是给它第二个想法,这并不是确凿的证据.
这个问题的现实例子.我正在修改一个富文本编辑器(hallo),我希望它有这些规范:
现在,在大多数情况下,当您关闭对话框时,您希望焦点返回到#txt.但是如果打开对话框并单击页面上的其他位置,编辑器将关闭并调用工具栏,包括要关闭的对话框.如果在这种情况下对话框将焦点返回到编辑器,它将再次激活编辑器.
据我所知,事件处理顺序至少是确定性的.某些事件可能会延迟,而其他事件则会提前处理.这就是'同步'的含义.例外情况当然是加载文件等事件.
从程序组件的角度来看,比如对话框,情况可能非常难以预测.它可以将处理程序绑定到open事件,然后调用dialog("open"),但是在调用和处理程序之间可能发生任何事情,只是因为编辑器在同一事件上有一个事件处理程序.
所以我的结论是1)是的,它是可预测的,但2)它需要一个复杂的架构来实现这一点.
我正在构建一个应用程序,其中第一个url段代表界面的语言,如:
/en/customer/3
/en/shop
Run Code Online (Sandbox Code Playgroud)
我的路由器设置如下:
{ path: ':lang/customers/:id', component: CustomerComponent },
{ path: ':lang/shop', component: ShopComponent },
Run Code Online (Sandbox Code Playgroud)
我想在引导的AppComponent或翻译服务中使用url(本例中为lang ='en')中的语言参数.我可以在ShopComponent和CustomerComponent中访问此参数,但代码中没有其他地方.当我在AppComponent中输入时:
constructor(private activatedRoute: ActivatedRoute, private router : Router) {
}
ngOnInit() {
this.router.routerState.root.params.subscribe((params: Params) => {
console.log('params: ',params);
}
this.activatedRoute.params.subscribe((params: Params) => {
console.log('params: ',params);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到两个空物.url param也是空的.
我究竟做错了什么?也许更重要的是,我显然缺少对路由器的一些概念性理解,但我在文档或其他地方找不到任何有用的信息.
谢谢你的帮助!
我正在创建一个基于jQuery小部件的富文本编辑器,它可以在页面上有多个实例.第一个实例应生成如下工具栏:
<input type="checkbox" id="bold-1"><label for="bold-1">..
<input type="checkbox" id="italic-1"><label for="italic-1">..
...
Run Code Online (Sandbox Code Playgroud)
第二个实例应该生成:
<input type="checkbox" id="bold-2"><label for ="bold-2">..
<input type="checkbox" id="italic-2"><label for ="italic-2">..
Run Code Online (Sandbox Code Playgroud)
标签'for'属性需要唯一引用其对应的输入'id'属性.因此,我需要为每个实例添加唯一的ID.
这样的东西可以工作,但我不想在全局命名空间中存储一个计数器:
var textEditorCount;
$.widget("myEditor.textEditor", {
_create: function () {
textEditorCount = textEditorCount ? textEditorCount + 1 : 1;
this.instanceID = textEditorCount;
},
...
};
Run Code Online (Sandbox Code Playgroud)
也许问题归结为:(如何)我可以在窗口小部件的命名空间中存储变量?
angular ×1
instance ×1
javascript ×1
jquery ×1
program-flow ×1
unique ×1
url-routing ×1
widget ×1