我有一个Aurelia的用例,我希望为每个附加的视图运行一个处理程序。 (这是一个HTML5 polyfill,用于日期和数字输入,可以通过querySelector
工作。)我意识到我可以在我创建的每个视图中调用它,但我想知道是否有一个最佳实践来设置它全球水平。 (注意:这可能是通过路由器管道步骤完成的,但所有视图可能都不受此限制,例如通过compose
加载的视图。)
我意识到这可能是危险的,但最佳做法是为视图和视图模型添加全局attached()
和detached()
处理程序吗?
编辑:看这里(https://github.com/aurelia/templating/blob/ee5b9d6742fddf3d163aee8face6e6a58ba1554c/src/view.js#L259)看起来好像可以在这里为一个全局处理程序添加一个钩子,它将视图作为参数,但我宁愿不必更改框架代码,如果可能的话。
答案 0 :(得分:1)
我的想法是创建一个带有attached
逻辑的基本viewmodel类,该逻辑包含全局所需的功能。
扩展视图模型可以根据需要调用super.attached()
来执行全局逻辑。
您可以在此处找到演示:https://gist.run/?id=fea4069d8a4361c4802c7c5d42105145
这也适用于compose
。我知道,它不是一个完全自动化的解决方案,而是一种选择加入方法,所以它需要在所有视图模型上进行一些额外的工作。
基类 - 由所有viewmodels
使用import { inject } from 'aurelia-framework';
@inject(Element)
export class BaseView {
constructor(element) {
this.element = element;
}
attached() {
// global logic goes here
}
}
示例视图模型 - 实际实现
import { BaseView } from './base-view';
import { inject } from 'aurelia-framework';
@inject(Element)
export class ExtendedView extends BaseView {
constructor(element) {
super(element);
}
attached() {
super.attached(); // global logic runs
}
}