我的問題的答案是「是」!它實際上相當簡單,至少如果控件使用htmlwidgets
框架。
警告:我對JavaScript不太熟練,所以這可能不是很好的Javascript風格。如果有,請告訴我,我會改進它。
這裏的想法:如果我有一個閃亮的sliderInput()
控制與inputId = "foo"
,然後我自己的JavaScript代碼可以使用它獲得window["foo"]
,並且可以在其上設置「的onchange」事件處理程序。當事件處理程序被觸發時,我可以讀取「value」屬性,並將其發送到我的控件。
如果我不使用來自滑塊的反應輸入,我不會延遲到服務器。
這裏有一個小部件我目前renderValue功能:
renderValue: function(el, x, instance) {
var applyVals = function() {
/* We might be running before the scene exists. If so, it
will have to apply our initial value. */
var scene = window[x.sceneId].rglinstance;
if (typeof scene !== "undefined") {
scene.applyControls(x.controls);
instance.initialized = true;
} else {
instance.controls = x.controls;
instance.initialized = false;
}
};
el.rglcontroller = instance;
if (x.respondTo !== null) {
var control = window[x.respondTo];
if (typeof control !== "undefined") {
var self = this, i, oldhandler = control.onchange;
control.onchange = function() {
for (i=0; i<x.controls.length; i++) {
x.controls[i].value = control.value;
}
if (oldhandler !== null)
oldhandler.call(this);
applyVals();
};
control.onchange();
}
}
applyVals();
},