我在看一个class
(this one)。它的文档建议你可以extend
这个类来改变这个类的一个属性。这是真的,它对我很有效。
然而,我想做的是动态地提供设置的值。
我有两个问题
第一个
如何修改演示,以便动态提供所使用的值?
第二个
我意识到,当我查看类时,这似乎是代码的重要部分...
ajax (url, data = {}, method = this.method) {
const ajaxSettings = assign(
{},
{
contentType: false,
processData: false,
xhr: () => {
const xhr = $.ajaxSettings.xhr();
xhr.upload.onprogress = (event) => {
this.didProgress(event);
};
this.one('isAborting', () => xhr.abort());
return xhr;
},
url,
data,
method
},
get(this, 'ajaxSettings')
);
return this.ajaxPromise(ajaxSettings);
},
......我不确定自己是否理解“extend”是如何执行其当前操作的。ajaxSettings
在ajax
函数中使用,那么extend
如何到达该函数并将extend中提供的值合并到该函数中的硬编码值中呢?
希望这个问题有意义......如果你不写书就不能完成“第二”,我很乐意满足于“第一”的答案;- )
回应评论
- X1 M5 N1 X在这里被定义为X1 E1 F1 X,并且
get
在这里被定义为https://api.emberjs.com/ember/3.8/functions/@ember%2Fobject/get。
1条答案
按热度按时间yh2wf1be1#
1.如果要动态设置
ajaxSettings
,似乎可以简单地将其设为计算属性:1.这确实是使用
ajaxSettings
属性的地方,关键的代码行如下:它从类中检索
ajaxSettings
属性(因此,如果ajaxSettings
是在基类上设置的,则子类将覆盖基类设置--有关extends的更多信息,请参见here)。该行与Object.assign()(技术上是Ember's polyfill)一起使用来构建选项。这部分提供了一些默认值:
但是由于
ajaxSettings
的检索发生在默认值之后,所以在类的ajaxSettings
对象中指定的与上述默认值重叠的任何属性都将优先并覆盖它们。所以如果你在你的类
ajaxSettings
中定义contentType
,如下所示:这将与上述默认值中指定的
contentType: false
重叠,并且由于它将在默认值之后通过assign()
合并,因此它将优先。