我正在看一个class
(这个)。在它DOCO建议你可以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);
},
...我不确定我是否理解“扩展”是如何进行的。ajaxSettings
在ajax
函数内使用,那么函数内的范围又如何extend
将扩展中提供的值合并到函数中的硬编码值中?
希望这个问题有意义...如果您不写书就无法管理“第二”,我会很乐意为“第一”提供答案;-)
回应评论
ajaxSettings
如果要动态设置计算属性,您似乎可以简单地设置它:import Uploader from 'ember-uploader/uploaders/uploader';
import { computed } from '@ember/object';
export default Uploader.extend({
ajaxSettings: computed('someProperty', function() {
// do your logic to set the options dynamically in here
return {
headers: {
'X-Application-Name': 'Uploader Test'
}
};
})
});
ajaxSettings
使用该属性的地方,并且代码的关键所在是这一行:get(this, 'ajaxSettings')
它将ajaxSettings
从类中检索属性(因此,如果ajaxSettings
在基类上进行了设置,则您的子类将覆盖基类设置-有关扩展的更多信息,请参见此处)。
该行与Object.assign()(技术上是Ember的polyfill)一起使用以构建选项。这部分提供一些默认值:
{
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
}
}
但是由于检索ajaxSettings
是在默认值之后进行的,因此在您的类ajaxSettings
对象中指定的与上述默认值重叠的任何属性都将具有优先权并覆盖它们。
因此,如果您contentType
在类中定义ajaxSettings
如下:
ajaxSettings: computed('someProperty', function() {
return {
contentType: true, // (or some other value besides false)
...
};
})
这将与contentType: false
上面的默认值中指定的值重叠,并且由于它将在默认值assign()
之后进行合并,因此将具有优先权。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句