CocosCreator編碼貼士:活用_isOnLoadCalled屬性延遲代碼執(zhí)行時機

我這個人有一個習慣,喜歡寫getter/setter豺谈,這樣的好處是在設置了某屬性值時會自動更新UI泣栈,省了不少事册烈,但是在cocosCreator里面更新UI的操作必須在onLoad事件觸發(fā)之后,如果不遵循這個原則骂倘,那么你訪問的節(jié)點很有可能是空眼滤。
例子代碼:

cc.Class({
    extends: cc.Component,

    properties: {
        background: cc.Sprite,
        bgImg: {
            get () {
                return this._bgImg;
            },
            set (value) {
                if(this._bgImg!= value)
                {
                    this._bgImg= value;
                    this.updateView();
                }
            },
            visible: false
        },

    },

    updateView(){
        this.background.spriteFrame = this._bgImg;
    },

});

每當我設置了上述代碼中的bgImg = xxx時都會導致updateView方法被調用來更新UI,即改變this.background的紋理稠茂。但是有時候在updateView方法被調用時我的onLoad方法還未被執(zhí)行柠偶,這時候this.background就是underfined,這樣的話就會導致報錯睬关。
好在cc.Component類里面提供了一個私有屬性叫做_isOnLoadCalled诱担,下面是官方API文檔對其的解釋:

_isOnLoadCalled Number 返回一個值用來判斷 onLoad 是否被調用過,不等于 0 時調用過电爹,等于 0 時未調用蔫仙。
那么,借助該屬性丐箩,我們可以把代碼改為

cc.Class({
    extends: cc.Component,

    properties: {
        background: cc.Sprite,
        bgImg: {
            get () {
                return this._bgImg;
            },
            set (value) {
                if(this._bgImg!= value)
                {
                    this._bgImg= value;
                    if(this._isOnLoadCalled)//對onLoad是否已被調用的把關
                    {
                        this.updateView();
                    }
                }
            },
            visible: false
        },

    },

    //因為bgImg的setter中可能沒能執(zhí)行updateView摇邦,因此在onLoad中需要執(zhí)行該方法,哪怕updateView被執(zhí)行了兩遍也沒關系
    onLoad(){
        this.updateView();
    }

    updateView(){
        this.background.spriteFrame = this._bgImg;
    },

});
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末屎勘,一起剝皮案震驚了整個濱河市施籍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌概漱,老刑警劉巖丑慎,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡竿裂,警方通過查閱死者的電腦和手機玉吁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腻异,“玉大人进副,你說我怎么就攤上這事』诔#” “怎么了影斑?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長这嚣。 經(jīng)常有香客問我鸥昏,道長,這世上最難降的妖魔是什么姐帚? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任吏垮,我火速辦了婚禮,結果婚禮上罐旗,老公的妹妹穿的比我還像新娘膳汪。我一直安慰自己,他們只是感情好九秀,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布遗嗽。 她就那樣靜靜地躺著,像睡著了一般鼓蜒。 火紅的嫁衣襯著肌膚如雪痹换。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天都弹,我揣著相機與錄音娇豫,去河邊找鬼。 笑死畅厢,一個胖子當著我的面吹牛冯痢,可吹牛的內容都是我干的。 我是一名探鬼主播框杜,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浦楣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咪辱?” 一聲冷哼從身側響起振劳,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎油狂,沒想到半個月后澎迎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庐杨,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年夹供,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁堪。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哮洽,死狀恐怖,靈堂內的尸體忽然破棺而出弦聂,到底是詐尸還是另有隱情鸟辅,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布莺葫,位于F島的核電站匪凉,受9級特大地震影響,放射性物質發(fā)生泄漏捺檬。R本人自食惡果不足惜再层,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堡纬。 院中可真熱鬧聂受,春花似錦、人聲如沸烤镐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炮叶。三九已至碗旅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镜悉,已是汗流浹背祟辟。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留积瞒,地道東北人川尖。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像茫孔,于是被迫代替她去往敵國和親叮喳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件剩晴,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,493評論 1 11
  • 前端開發(fā)面試題 <a name='preface'>前言</a> 只看問題點這里 看全部問題和答案點這里 本文由我...
    自you是敏感詞閱讀 761評論 0 3
  • 還記得去年夏天來巡視過校園的老朋友喵大王湯圓嗎悼嫉? 點擊查看??? 在大學等你 | 沒有你的校園艇潭,有點寂寞·····...
    蘇農不吃冰閱讀 256評論 0 0
  • 小航: 你好蹋凝,你好,你好总棵。 見字如面鳍寂。 如果沒有機會或者時間說,那就讓文字來架起一座橋梁吧情龄∑矗總有一天你會體會到,寫...
    滄海之心閱讀 359評論 1 3
  • 以空杯心態(tài)練旗袍秀,身體狀態(tài)呈現(xiàn)的僵硬尚胞、動作不協(xié)調硬霍、表情不自然非常明顯,但體驗過程中我是快樂的笼裳,用:心去...
    心靈的笑聲閱讀 303評論 2 4