如何解决Vue,Vuex:在嵌套的反应式类中访问私有属性
给出以下Vuex状态:
{
model: new Model
}
以下型号:
import { DataModel } from '@/foundation/data-model'
import { Child } from '@/models/child'
export class Model extends DataModel {
static defaults = {
name: null,child: new Child
}
constructor(payload = null) {
super(Model.defaults)
if (payload) this.hydrate({
...payload,child: new OtherModel(payload.child)
})
}
}
孩子:
import { DataModel } from '@/foundation/data-model'
export class Child extends DataModel {
static defaults = {
name: null
}
constructor(payload = null) {
super(Child.defaults)
this.hydrate(payload)
}
// other methods,setters,and getters.
}
和数据模型:
import { assign,cloneDeep } from 'lodash'
export class DataModel {
#noHistory = false
#originals = {}
constructor(payload = null,noHistory = false) {
this.#noHistory = noHistory
this.hydrate(payload || {})
}
hydrate(payload = null,withOriginals = true) {
if (!payload) return
if (!payload instanceof Object) throw 'DataModel: payload is not an object'
if (withOriginals && !this.noHistory) this.#originals = cloneDeep({ ...payload })
assign(this,cloneDeep({ ...payload }))
return this
}
get originals() {
return this.#originals
}
// other getters and methods
}
为什么我可以通过根#originals
(处于Vuex状态)中的originals
访问model
,但不能通过model.child.#originals
访问model.child.originals
?
如果我尝试这样做,我会得到:
TypeError:尝试在非实例上获取私有字段
model.originals // returns an object containing the original payload
model.child.originals // throws the TypeError
这可能是由于Vue或Vuex包装对象以使其具有反应性的方式吗?如果是这样,为什么它只适用于model.child
而不适用于model
,我如何解决呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。