Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问Ember global';App&x27;Ember CLI应用程序中的变量?_Javascript_Ember.js_Ember Cli - Fatal编程技术网

Javascript 如何访问Ember global';App&x27;Ember CLI应用程序中的变量?

Javascript 如何访问Ember global';App&x27;Ember CLI应用程序中的变量?,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我正在使用Ember CLI创建一个Ember应用程序。我有一个调用我创建的组件的视图。我正在尝试访问全局应用程序变量以创建组件并将其插入布局 错误:未捕获引用错误:未定义应用程序 我该如何解决这个问题 app.js import Ember from 'ember'; import Resolver from 'ember/resolver'; import loadInitializers from 'ember/load-initializers'; Ember.MODEL_FACTOR

我正在使用Ember CLI创建一个Ember应用程序。我有一个调用我创建的组件的视图。我正在尝试访问全局应用程序变量以创建组件并将其插入布局

错误:未捕获引用错误:未定义应用程序

我该如何解决这个问题

app.js

import Ember from 'ember';
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';

Ember.MODEL_FACTORY_INJECTIONS = true;

var App = Ember.Application.extend({
  modulePrefix: 'client-web', // TODO: loaded via config
  Resolver: Resolver
});

loadInitializers(App, 'client-web');

export default App;
import Ember from 'ember';

export default Ember.Component.extend({
    templateName: 'components/freestyle-chart',

    didInsertElement: function() {
        console.log('Inserted the component.');
    }
});
item table.js(这是一个视图)

app/components/freestyle chart.js

import Ember from 'ember';
import Resolver from 'ember/resolver';
import loadInitializers from 'ember/load-initializers';

Ember.MODEL_FACTORY_INJECTIONS = true;

var App = Ember.Application.extend({
  modulePrefix: 'client-web', // TODO: loaded via config
  Resolver: Resolver
});

loadInitializers(App, 'client-web');

export default App;
import Ember from 'ember';

export default Ember.Component.extend({
    templateName: 'components/freestyle-chart',

    didInsertElement: function() {
        console.log('Inserted the component.');
    }
});

我可以想出两种方法。首先是手动将应用程序置于全局范围

var App = window.App = Ember.Application.extend();
第二种方法是将应用程序导入到您的视图中:

import App from './path/to/app/file';
只有当Ember CLI支持循环引用时,才可能使用后者。官方的ES6规范支持它们,但许多Transpiler不支持(我的不支持)


然而,我不认为这是你的根本担忧。在大多数情况下,您不应该在Ember CLI中访问全局变量。与其将
FreestyleChartComponent
放在
App
名称空间中,为什么不把它放在一个模块中,然后像其他模块一样导入呢?全局变量是不可避免的(我今天就体验到了这一点),但您应该尽量减少它们。

导入您想要的组件:

import FreestyleChartComponent from 'app_name/app/components/freestyle-chart';

我同意你不应该通过全局名称空间访问你的应用程序,但是
ember cli
实际上使你的应用程序成为一个全局应用程序,应用程序的名称就是变量的名称

如果在
ember cli
项目中打开
/app/index.html
,您应该会看到底部有一个
脚本
标记,看起来像

<script>
  window.YourAppName = require('your-app-name/app')['default'].create(YourAppNameENV.APP);
</script>

window.YourAppName=require('your-app-name/app')['default'].create(yourappnameev.app);

在上面的示例中,
YourAppName
将是您的应用程序作为一个全局应用程序提供

没有直接的方法可以做到这一点,因为Ember CLI希望您使用公共API及其给定组件,而不是直接访问应用程序实例

大多数解决方案都包括使应用程序实例成为全局的,而这一个则不是。我没有对此进行测试,但我认为这应该有效:

appname/utils/application.js

appname/instance初始值设定项/application.js

现在

从“appname/utils/application”导入应用程序


并在需要应用程序实例的任何文件中使用
application.instance

经过Ember 3.7的测试

import App from 'app-name/app';

应用程序名称
必须替换为应用程序的名称(我猜是package.json中的名称)。

我尝试了第一个选项,但没有成功。第二个已编译,但现在的错误是“UncaughtTypeError:无法读取未定义的属性'create'。如何创建模块?找不到太多关于这个的信息。很抱歉有新来的问题。另外,假设我在这里甚至没有问这个问题,您将如何在Ember CLI应用程序中动态创建组件?我当前的脚本正确吗?如果第一个选项不起作用,那么你做了其他错误的事情。一个特定的错误可以帮助我们找到那个问题。至于第二个不起作用,听起来像是
App.FreestyleChartComponent
不存在。如果没有更多的代码,我真的无法帮助您诊断。我基本上如下所示:。除了我的应用程序是使用Ember CLI创建的这一事实之外,没有其他不同之处。您能否向我们展示您声明
Freestyle ChartComponent
的代码?我尝试了这一点,现在它可以找到该组件了。谢谢但是,现在的错误是:“断言失败:不能追加到现有的EMBE.VIEW。我刚刚将视图更改为ContainerView,它现在显示“未捕获的错误:断言失败:您试图附加到([object object]),但它不在DOM中”。视图的模板也不在页面上。你应该在另一个问题中询问,而不是在这里的评论中。这与最初的问题无关。我已经删除了我的答案,因为它没有帮助。对不起,伙计。
import App from 'app-name/app';