#1
by
simoncolumbus
(edited )
I would like to use Quentin André's distBuilder Javascript library in oTree to elicit a distribution. I've managed to get it to display right, but I'm struggling to record the output in oTree. The documentation for the library is here: https://quentinandre.github.io/DistributionBuilder/ In my __init__.py file, I have the following: class Player(BasePlayer): my_var = models.StringField() class MyPage(Page): form_model = 'player' form_fields = ['my_var'] Then, in the MyVar.html page file, I've included the CSS in a <style> block on top; this works fine (i.e., it displays correctly). The distributionsbuilder.min.js file is in the 'static' folder. However, I am struggling with recording the output of the distributionbuilder into my 'my_var' StringField. The full Javascript code to be included in the MyVar.html is below. The crucial bit is this: $j("#SubmitDistribution").click(function() { var my_var = distbuilder.getDistribution().join; <-- record data here --> }); I first join everything into a string; then, I somehow need to push this to oTree---that's where I'm stuck. I'd much appreciate any suggestions! Full code for MyVar.html: {{ formfield_errors 'my_var' }} <div id="targetdiv"></div> <script src="{{ static 'distributionbuilder.min.js' }}"></script> <script> var distbuilder = new DistributionBuilder({ nRows: 5, nBuckets: 11, minVal: 0, maxVal: 10, nBalls: 5, onTouch: function () { console.log("Distbuilder was touched!") }, onChange: function () { console.log("Distbuilder was updated!") if (this.isComplete()) { $j("#SubmitDistribution").attr("disabled", false) } else { $j("#SubmitDistribution").attr("disabled", true) } }, toggleGridClick: true, addTotals: true }); $j("#SubmitDistribution").click(function() { var my_var = distbuilder.getDistribution().join; <-- record data here --> }); distbuilder.render("targetdiv"); distbuilder.labelize({ labels: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }); </script>
#2
by
Chris_oTree
Either use liveSend or write it to a hidden form field.