Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I think that you simply forgot to set a Name to your hidden widget , you only gave an ID... and as you obviously know the event parameter uses the widgets name to get back its value. :-) </p> <pre><code>h = app.createHidden("selectedGrade").setId("selectedGrade").setName("selectedGrade"); </code></pre> <hr> <p><strong>EDIT :</strong></p> <p>Oooops, you're right, I didn't notice at first.</p> <p>After playing a bit with your code I found that you where forgeting a callBackElement with your handler, I also added a second hidden widget to hold the course value. Here is a copy of your code in which I replaced the hidden widgets by textBoxes to see what was happening. It seems to work as expected, you can hide the textBoxes when everything is ok or replace them by hidden widgets again.</p> <pre><code> function executionStartsHere() { var doc = SpreadsheetApp.getActiveSpreadsheet(); var app = UiApp.createApplication().setTitle('Course Planner'); var panel = app.createVerticalPanel(); panel.setId("main-panel"); //grades panel.add(_getLabel("Grades")); uniqueGrades = _findUniqueGrades(); gradeListBox = _getListBox(app,uniqueGrades,"grade-listbox","grades"); var gradeHandler = app.createServerHandler('_clickGrade').addCallbackElement(panel); gradeListBox.addChangeHandler(gradeHandler); panel.add(gradeListBox); //courses panel.add(_getLabel("Courses")); courseListBox = _getListBox(app,{item:'First choose a grade value'},"course-listbox","courses"); var courseHandler = app.createServerHandler('_clickCourse').addCallbackElement(panel); courseListBox.addChangeHandler(courseHandler); panel.add(courseListBox); //semester panel.add(_getLabel("Semester")); semesterListBox = _getListBox(app,{item:'First choose a course value'},"semester-listbox","semesters"); panel.add(semesterListBox); var h = app.createTextBox().setName("selectedGrade").setId("selectedGrade"); var h2 = app.createTextBox().setName("selectedCourse").setId("selectedCourse"); panel.add(h).add(h2); //finally app.add(panel); doc.show(app); } function _clickGrade(eventInfo) { var app = UiApp.getActiveApplication(); // get value of ListBox based on name var selectedGrade = eventInfo.parameter.grades; Logger.log("In clickGrade, selected:"+selectedGrade); //eventInfo.parameter.selectedGrade=selectedGrade; app.getElementById("selectedGrade").setValue(selectedGrade); Logger.log("eventInfo.parameter.selectedGrade: "+eventInfo.parameter.selectedGrade); _displayCourses(selectedGrade); return app; } function _clickCourse(eventInfo) { //WE NEED TO SOMEHOW PASS THE SELCTED GRADE IN HERE var app = UiApp.getActiveApplication(); var grade = app.getElementById("selectedGrade") var grade2 = eventInfo.parameter.selectedGrade; var course = eventInfo.parameter.courses; app.getElementById("selectedCourse").setValue(course); Logger.log("Selected grade, grade2, course: "+grade+" ,"+grade2+" ,"+course); _displaySemesters(grade2,course); return app; } function _displayCourses(grade) { var app = UiApp.getActiveApplication(); validCourses = _findValidCourses(grade); lb = app.getElementById("course-listbox"); _populateListBox(lb,validCourses); } function _displaySemesters(grade,course){ var app = UiApp.getActiveApplication(); Logger.log(grade+' '+course) validSemesters = _findValidSemesters(grade,course); lb = app.getElementById("semester-listbox"); _populateListBox(lb,validSemesters); } function _findUniqueGrades(){ var workBook = _getWorkBook(); var sheet = _getLearningOutcomeSheet(workBook); var graderows = getColumnAsArray(sheet, 1); var grades= {}; for(var i=1; i&lt;graderows.length; i++) { //skip the first row (labels) if(graderows[i] != "" &amp;&amp; graderows[i] != undefined ) { grades[graderows[i]]=graderows[i]; } } return grades; } function _findValidCourses(grade) { var workBook = _getWorkBook(); var sheet = _getLearningOutcomeSheet(workBook); var graderows = getColumnAsArray(sheet, 1); var courserows = getColumnAsArray(sheet, 3); // loop over courserows // if the grade for this courserow matches the grade we are searching for // then store this courserow in an associative array validCourses = {}; for(var i=0; i&lt; courserows.length; i++) { if ( graderows[i] == grade ) { validCourses[courserows[i]] = courserows[i]; } } return validCourses; } function _findValidSemesters(grade,course){ var workBook = _getWorkBook(); var sheet = _getLearningOutcomeSheet(workBook); var graderows = getColumnAsArray(sheet, 1); var courserows = getColumnAsArray(sheet, 3); var semesterrows = getColumnAsArray(sheet, 2); validSemesters = {}; for(var i=0; i&lt; semesterrows.length; i++){ if ( courserows[i] == course &amp;&amp; graderows[i] == grade ){ validSemesters[semesterrows[i]] = semesterrows[i]; } } return validSemesters; } function _getListBox(app,items,id,label){ var lb = app.createListBox().setId(id).setName(label); lb.setVisibleItemCount(1); //add items, if any for each ( i in items) { lb.addItem(i); } return lb; } function _populateListBox(listBox,items){ listBox.clear(); Logger.log("ListBox ID: "+ listBox.getId()); for each ( i in items) { Logger.log("adding item: " + i); listBox.addItem(i); } } function _getWorkBook(){ return SpreadsheetApp.getActiveSpreadsheet() } function _getLearningOutcomeSheet(workBook){ return workBook.getSheets()[0]; } function _getLabel(string){ var app = UiApp.getActiveApplication(); return app.createLabel(string); } function getColumnAsArray(sheet,column) { var dataRange = sheet.getRange(1,column,99,1); var data = dataRange.getValues() //Logger.log("column values: " + data); return data; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload