我有一个脚本,该脚本使用active_votes = Vote.objects.filter(votes_to_win__gt=Max('voteforcharacter__votes_number'))
检查某些对象状态,但这会导致一些延迟,我想知道是否可以使用 var options = {
chart: {
style: {
fontFamily: 'arial'
},
height: 300,
events: {
drilldown: function (e) {
generateDrillDownJSON(e, false);
},
drillup: function (e) {
generateDrillDownJSON(e, true);
}
}
},
title: {
text: Var_ChartTitleText,
},
subtitle: {
text: Var_ChartSubtitleText,
},
tooltip: {
formatter: function () {
return this.point.name + ' : ' + this.y + ' %';
}
},
xAxis: {
categories: true
},
drilldown: Var_drilldown,
legend: {
enabled: true
},
plotOptions: {
allowhtml: true,
series: {
dataLabels: {
enabled: true,
formatter: function () {
return this.point.name + ' : ' + this.y + ' %';
}
},
useHTML: true,
shadow: true
},
pie: {
size: '100%',
showInLegend: true
}
},
series: Var_Series
};
?
我的setInterval
:
MutationObserver
我的观察者尝试:
setInterval
可以做到吗?
答案 0 :(得分:1)
由于您的对象似乎不是DOM节点,因此MutationObserver在这里无济于事。但是,您可以使用getters / setters或proxy objects轻松实现某种对象观察。一个简单的例子:
var playerInfo = {
set health(newValue) {
this._health = newValue;
if (this.onhealthchange) {
this.onhealthchange(newValue);
}
},
get health() {
return this._health;
}
};
playerInfo.onhealthchange = function(newValue) {
console.info("Health changed: " + newValue);
};
playerInfo.health = 4;
答案 1 :(得分:1)
我建议使用setter和getter(正如我在注释中所写,MutationObserver仅用于Node对象)。而且由于我从您的代码中假定的属性可能具有各种类型(对象,字符串等),所以我建议使用lodash isEqual
方法-它接受数组,对象,字符串,数字等,因此您不必无需为每种类型编写比较功能。功能非常方便。
您也只能安装this particular function。
我在这里创建了一个函数,您可以在其中传递对象和属性名称以查看更改:
var isEqual = require('lodash.isequal');
function watchChanges(object, prop, primaryValue) {
object[`_${prop}`] = primaryValue;
Object.defineProperty(object, prop, {
get() { return object[`_${prop}`] },
set(newValue) {
if ( !isEqual(object[`_${prop}`] , newValue)) {
console.log('change maded in prop')
}
object[`_${prop}`] = newValue;
},
});
}
要检查发生了什么,以下是原始类型的等效函数:
function watchChanges(object, prop, defaultValue) {
object[`_${prop}`] = defaultValue;
Object.defineProperty(object, prop, {
get() { return object[`_${prop}`] },
set(newValue) {
if ( object[`_${prop}`] !== newValue) {
console.log('change maded in', prop, 'was', object[`_${prop}`], 'is', newValue)
}
object[`_${prop}`] = newValue;
},
});
}
ob = {a: 1, b:1, c:1};
watchChanges(ob, 'a', ob.a);
ob.a = 2;
ob.a = 3;