如何从静态javascript获取ember/emberjs中的视图实例的引用?

Sep*_*phy 9 reference view ember.js

我在网上看到了很多关于这个问题的问题(SOF和谷歌),但到目前为止还没有明确答案.

我有一个通常的Ember应用程序,具有各种视图和控制器.我的一个视图有一个实例方法,我想从静态上下文调用.因此在一个普通的javascript文件中.我应该引用ember实例化的视图来调用方法吗?

几行代码来说明我的问题:

在ApplicationView.js中:

App.ApplicationView = Em.View.extend({
    templateName: 'application',

    myInstanceMethod:function () {
       this.anotherInstanceMethod(some, params);
    },
    // ... more code
});
Run Code Online (Sandbox Code Playgroud)

在MyUtils.js中:

var myUtils = myUtils || {
    myMethod: function() {
        myApplicationViewInstance.myInstanceMethod();
    }
};
Run Code Online (Sandbox Code Playgroud)

mav*_*ein 6

这是我个人解决这个问题的方法.我使用Ember.View的"didInsertElement"在一个中心位置注册View.这适用于单例视图.对于非单例视图,必须开发更复杂的ViewRegistry.

灰烬部分

var App = Ember.Application.create({
    viewRegistry : {
        applicationView : null
    },
});

App.ApplicationView = Ember.View.extend({
    templateName : 'application',
    didInsertElement : function(){
        App.set("viewRegistry.applicationView", this);
    }
});
Run Code Online (Sandbox Code Playgroud)

在MyUtils.js中:

var myUtils = myUtils || {
    myMethod: function() {
        App.get("viewRegistry.applicationView").myInstanceMethod();
    }
};
Run Code Online (Sandbox Code Playgroud)