Ember”;这个“;组件中未定义
Ember "this" undefined in component
我正在尝试制作一个进度条,它会随着更多挑战的完成而更新。但是,组件无法访问该属性,因为该属性未定义。
我已经注入了一个服务,并试图从该服务的属性创建一个计算属性。但是,除非在调试中,否则这始终是未定义的。
import Ember from 'ember';
export default Ember.Component.extend({
progress: 0,
game: Ember.inject.service(),
events: this.get("game.challenges")
});
如何在上面的代码中定义这个?它如何不受任何范围的约束?
我加入了一个调试器,如下所示:
init() {
debugger
},
如果我注销this.get("game")
,它将返回预期值。
我还尝试将服务放入init中,但仍然没有定义。我试过注销这个,那个也没有定义。
有没有办法在继续之前强制解决服务?我尝试过使用各种组件挂钩,但它们似乎并没有改变。
详述汤姆的答案:
在JS中,this
是一种特殊的变量。它的意义取决于它是否在函数内部。
- 在函数之外,它是全局上下文(在浏览器中,通常是
window
对象) - 在函数内部,它是调用函数的对象。例如,如果你写
obj.f()
,那么this
将是f()
中的obj
。如果直接调用函数,this
将保持当前状态
在您的代码中,JS引擎当前正在函数外部执行(它正准备调用extend
,并向其传递一个对象)。
export default Ember.Component.extend({
game: Ember.inject.service(),
events: this.get("game.challenges")
});
因此,代码中的this
是指window
对象。您可以使用计算属性来修复此问题,也就是说,当访问属性时,会在对象上调用一个函数:
export default Ember.Component.extend({
game: Ember.inject.service(),
events: Ember.computed('game.challenges', function() {
return this.get("game.challenges");
})
});
你可以在函数中做任何你需要的计算。记住,结果所依赖的任何东西都必须列在property()
中,这样Ember就知道何时重新计算
最后,对于一些常见的情况,ember提供了一些快捷方式,如Ember.computed.alias
、Ember.computed.equal
…
您必须告诉Ember这是一个计算属性。计算的属性在文档中有很好的记录-
http://guides.emberjs.com/v2.0.0/object-model/computed-properties/
如果你只是想让它与服务中的值相同,你可以这样别名:
game: Ember.computed.alias('game.challenges')
- 组件生命周期问题/无法处理未定义的问题
- GoogleMap JSX组件中未定义的变量
- Ember服务在注入组件并在计算属性中使用后是未定义的
- ReactJS中未定义组件
- 使用AMD时未定义淘汰组件视图模型
- 传递给Angular2组件的字符串始终未定义
- 尝试在组件之间传递数据时未定义
- 未定义编码 URI 组件
- 角度2 - 未定义组件
- Vue.js 使用 Vuex 和自定义组件,@click方法输出未定义
- JavaScript 中介器模式;组件名称未定义
- 嵌入 API 自定义组件:未捕获类型错误:无法读取未定义的属性“ViewSelector2”
- Sencha touch 2-自定义组件开发数据项未从存储加载值
- 将控制器操作传递给EmberJS中的组件会返回未定义的结果
- 反应:“this”在组件函数中是未定义的
- Ember”;这个“;组件中未定义
- 在递归聚合物组件中插入新子组件时,无法读取未定义的属性“concat”
- 组件对话框无法在IE中运行(无法获取属性'clear'未定义或空引用)
- Vue.js中的未定义组件
- 浏览器的 reactjs 捆绑脚本在客户端不起作用(未捕获的引用错误:未定义组件)