【问题标题】:Global hook in Ember when template is rendered渲染模板时 Ember 中的全局挂钩
【发布时间】:2015-01-12 10:01:00
【问题描述】:

渲染模板时是否可以在 Ember 中捕获全局事件?

这样我就可以按照描述在每个模板的基础上调用初始化脚本。这不是初始化程序的候选者 - 我正在尝试在我的应用程序中大约 30% 的页面上初始化一些 jQuery 插件,所以这样做一次而不重复自己会很棒。

全局挂钩失败,挂钩正在呈现的模板的最合适位置是什么?我只使用模板,所以我不能在视图上捕获didInsertElement。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我不知道这是否是正确的方法,但我试了一下,因为你的问题让我很感兴趣。以下似乎有效:http://emberjs.jsbin.com/pujiqipafe/1/edit?html,js,output

    基本上我使用路由挂钩renderTemplate并添加:

    Ember.run.scheduleOnce('afterRender', myfunction);

    拨打this.render()之后。

    您可以通过制作一个

    来扩展它
    App.MyJqueryRoute = Ember.Route.Extend({
      renderTemplate: function(){
        this.render();
        var myjquery = function(){
          //do your jQuery stuff here
        };
        Ember.run.scheduleOnce('afterRender', myjquery);
      }
    });
    

    然后只需在您需要此功能的路由中扩展App.MyJqueryRoute而不是Ember.Route.Extend。

    (这是我在阅读您的帖子时提出的建议想法,我不是 ember 专家,所以我很乐意从社区听到任何其他解决方案或对我的解决方案的改进)

    【讨论】:

    • 为什么不直接重新打开 Route 类并覆盖 renderTemplate?它将适用于所有路线。 emberjs.jsbin.com/miluhecupi/1/edit
    • @blessenm 因为他在 30% 的页面上说过,所以重新打开它会在 70% 的页面上执行无用的代码。
    • 啊,我没有仔细阅读这个问题。是的,你的观点是有效的。你的答案似乎是要走的路。
    • @blessenm 我希望如此,但很高兴能得到作者的回答
    • 另一种我认为合适的方法是将 jquery 插件包装在一个组件中并在 didInsertElement 挂钩中初始化它们。这也将允许我们使用组件生命周期来清理插件。
    猜你喜欢
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多