【问题标题】:Is it possible to create a global attach() handler for viewmodels?是否可以为视图模型创建全局 attach() 处理程序?
【发布时间】:2016-09-09 22:47:41
【问题描述】:

我有一个使用 Aurelia 的用例,我希望为每个附加的视图运行一个处理程序。 (这是一个用于日期和数字输入的 HTML5 polyfill,可通过querySelector 工作。)我意识到我可以在我创建的每个视图中调用它,但我想知道是否有最佳实践将其设置为全局级别. (注意:这可能通过路由器管道步骤完成,但并非所有视图都受此约束,例如通过compose 加载的视图。)

我知道这可能很危险,但是否有最佳做法为视图和视图模型添加全局 attached()detached() 处理程序?

编辑:看这里 (https://github.com/aurelia/templating/blob/ee5b9d6742fddf3d163aee8face6e6a58ba1554c/src/view.js#L259) 看起来好像可以在这里为全局处理程序添加一个钩子,将视图作为参数,但我宁愿不必更改框架代码,如果可能。

【问题讨论】:

    标签: javascript aurelia


    【解决方案1】:

    我的想法是创建一个具有attached 逻辑的基本视图模型类,其中包含全局所需的功能。 扩展的视图模型可以根据需要调用super.attached() 来执行全局逻辑。

    您可以在这里找到演示:https://gist.run/?id=fea4069d8a4361c4802c7c5d42105145

    这也适用于compose。我知道,这不是一个完全自动化的解决方案,而是一种选择加入的方法,因此它需要对所有视图模型进行一些额外的工作。

    基类 - 被所有视图模型使用

    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
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2017-11-01
      相关资源
      最近更新 更多