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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Ember.js 余烬组件构造函数args是代理{}_Ember.js - Fatal编程技术网

Ember.js 余烬组件构造函数args是代理{}

Ember.js 余烬组件构造函数args是代理{},ember.js,Ember.js,在新的Ember 3.20项目中(在3.19中也相同),添加新组件后 application.hbs: <Test @foo="hello" /> 控制台:代理{} 如何在构造函数中访问this.args?组件的args是一个代理,因此特殊行为可以包装对args的访问。例如,当您访问其中一个arg时——只有这样,arg才会被“消耗”,并且您的getter/操作与该arg的状态纠缠在一起。默认情况下,这具有优化更改跟踪的优势,因此,如果您通过100个参数,并且只在

在新的Ember 3.20项目中(在3.19中也相同),添加新组件后

application.hbs:

<Test @foo="hello" />
控制台:代理{}


如何在构造函数中访问this.args?

组件的args是一个代理,因此特殊行为可以包装对args的访问。例如,当您访问其中一个arg时——只有这样,arg才会被“消耗”,并且您的getter/操作与该arg的状态纠缠在一起。默认情况下,这具有优化更改跟踪的优势,因此,如果您通过100个参数,并且只在组件中使用其中一个或两个,那么您不必支付导致组件更新的100个参数的费用

它的工作原理有点像这样:

args = new Proxy(actualArgs, {
  get(target, argName) {
     consumeTag(tagFor(target, argName));

     return target[argName];
  }
});
通常情况下,如果您只有一个普通对象,那么访问arg只能得到值。此代理演示了与跟踪系统的交互,以便您的组件现在可以与arg的更新纠缠在一起

有关自动跟踪的更多信息,@pzuraq在这里进行了深入讨论:(不一定是在余烬中自动跟踪,但更一般)

此外,如果感兴趣,请提供有关代理的文档:



注意:此信息适用于Ember 3.13+

您应该能够访问
this.args.foo
。您可能会被
这一点弄糊涂。args
是一个变量,因此没有看到您在POJO中使用的值。是的,好的,这似乎有效。另外,我假设传入对父组件的引用,而不是在构造函数中调用this.args.parent.args.foo,这在设计上不应该起作用?不过,它在其他函数/属性中也能工作。我不确定它是否受支持,但这肯定是一种不好的做法。您应该只将所需的数据和函数传递给子组件。不是父组件的整个实例。
args = new Proxy(actualArgs, {
  get(target, argName) {
     consumeTag(tagFor(target, argName));

     return target[argName];
  }
});