label组件使用Object.defineProperty产生的问题(急....)

label组件使用Object.defineProperty产生的问题

Object.defineProperty(label, 'string', {

     get: () {

           return label._string
     },

     set: (value) {

           label._string = value
     },
});

label.string = "cocos";

label 的 string 虽然 设置成功,但是视图却没有更新。

我记得之前用 就可以的,希望官方解答下,谢谢。

版本:v1.7.0
平台:mac
测试环境:浏览器

1赞

官方能不能回复一下???? 真的很急

引擎并没有监听 _string 这个属性。
你这样重写后,覆盖了 label 原有的 string 的 setter,自然就不会刷新了。
可以考虑用 Object.getOwnPropertyDescriptor(cc.Label.prototype, ‘string’) 拿到引擎原来的 setter,然后在你的 set 里面调用引擎的 setter。

成功解决,非常感谢!!!

刚才测试的时候没仔细看,认真看了下,发现没成功:sob: :sob: :sob:

调用 Object.getOwnPropertyDescriptor(cc.Label.prototype, ‘string’) set 并没有更新视图。

我从 Object.getOwnPropertyDescriptor(cc.Label.prototype, ‘string’) 里面看到set 是写在 preprocess-class.js 里面的。

然后我就打开它,编辑了自己的代码,却发现 在浏览器中运行没有任何作用。。。 但是编辑器里面却有作用,请问 这到底是 什么梗 ???

你没有重新构建引擎吧?

要怎么构建???

浏览器运行,通过控制台 看到的set代码 明明是被我改过的,但是console打印出来,却还是没有改过的代码 :sob:

参考 http://docs.cocos.com/creator/manual/zh/advanced-topics/engine-customization.html#安装编译依赖

这样改的话,native 是不是也需要改?如果是这样的话,那就需要改动两份。有没有更好的办法能实现我想要的效果呢 ??

麻烦了

native 不用改