mirror of
https://github.com/genxium/DelayNoMore
synced 2024-12-27 12:08:21 +00:00
79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
const i18n = require('LanguageData');
|
|
|
|
// Returns a function, that, as long as it continues to be invoked, will not
|
|
// be triggered. The function will be called after it stops being called for
|
|
// N milliseconds. If `immediate` is passed, trigger the function on the
|
|
// leading edge, instead of the trailing.
|
|
function debounce(func, wait, immediate) {
|
|
var timeout;
|
|
return function() {
|
|
var context = this, args = arguments;
|
|
var later = function() {
|
|
timeout = null;
|
|
if (!immediate) func.apply(context, args);
|
|
};
|
|
var callNow = immediate && !timeout;
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(later, wait);
|
|
if (callNow) func.apply(context, args);
|
|
};
|
|
}
|
|
|
|
cc.Class({
|
|
extends: cc.Component,
|
|
|
|
editor: {
|
|
executeInEditMode: true,
|
|
menu: 'i18n/LocalizedLabel'
|
|
},
|
|
|
|
properties: {
|
|
dataID: {
|
|
get () {
|
|
return this._dataID;
|
|
},
|
|
set (val) {
|
|
if (this._dataID !== val) {
|
|
this._dataID = val;
|
|
if (CC_EDITOR) {
|
|
this._debouncedUpdateLabel();
|
|
} else {
|
|
this.updateLabel();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_dataID: ''
|
|
},
|
|
|
|
onLoad () {
|
|
if(CC_EDITOR) {
|
|
this._debouncedUpdateLabel = debounce(this.updateLabel, 200);
|
|
}
|
|
if (!i18n.inst) {
|
|
i18n.init();
|
|
}
|
|
// cc.log('dataID: ' + this.dataID + ' value: ' + i18n.t(this.dataID));
|
|
this.fetchRender();
|
|
},
|
|
|
|
fetchRender () {
|
|
let label = this.getComponent(cc.Label);
|
|
if (label) {
|
|
this.label = label;
|
|
this.updateLabel();
|
|
return;
|
|
}
|
|
},
|
|
|
|
updateLabel () {
|
|
if (!this.label) {
|
|
cc.error('Failed to update localized label, label component is invalid!');
|
|
return;
|
|
}
|
|
let localizedString = i18n.t(this.dataID);
|
|
if (localizedString) {
|
|
this.label.string = i18n.t(this.dataID);
|
|
}
|
|
}
|
|
}); |