What am I doing wrong?
I have a table full of Proposal records. Each Proposal has a child record that we call a Commit. I want to let a user select some or all Proposals, enter a couple dates in a popup, and update those dates on the child Commit record of each selected Proposal.
The popup has a field editor with two date fields from a Ui-only model, and a title component with a button that runs the following snippet.
var table = skuid.$('#vwProposalTableFull'),
list,
datesModel = skuid.$M('vwCommitUpdates_UiOnly'); // the ui-only model that accepts new dates from the user
datesModel.save();
var datesRow = datesModel.getFirstRow(),
sentDate = datesModel.getFieldValue(datesRow,'Award_Letter_Sent_Ui'),
signedDate = datesModel.getFieldValue(datesRow,'Award_Letter_Signed_Ui');
// STEP 1: Load array with IDs of selected Proposals from the table. Funded only.
// This step works correctly.
if (table.length) {
list = table.data('object').list;
}
var idsArray = skuid.$.map(list.getSelectedItems(), function(item) {
if (item.row.Status__c == "Funded") {
return item.row.Id;
}
});
// STEP 2: Set condition to get only the Commits that belong to selected Proposals
// This step works correctly
var model = skuid.$M('vwCommitUpdates'),
condition = model.getConditionByName('Proposal_Details__c');
model.setCondition(condition, idsArray, false);
// STEP 3: Query model. When query completes, callback loops through each row to update date fields.
// This step is not working correctly.
model.updateData( function() {
try {
$.each(model.data, function(i, row) {
//if(row.Award_letter_sent__c ... I will set conditions here, when I get it working ) {
model.updateRow(row, 'Award_letter_sent__c', sentDate);
model.updateRow(row, 'Award_Letter_Signed__c', signedDate);
//}
});
} catch(err) {
console.log('error! ... ' + err); // Result is always: "TypeError: Cannot read property 'each' of undefined"
} finally {
console.log('code in finally');
}
model.save();
});
// STEP 4: housekeeping (close popup etc)
skuid.$('.ui-dialog-content').dialog('close');```
Steps 1, 2, and 4 work correctly. I cannot get Step 3 to work. The result of my try/catch is always err: "TypeError: Cannot read property 'each' of undefined".
When I step through this code in the console, or use console.log to show the state of vars in each block, I see rows in model.
This syntax seems to obey the documentation here, https://docs.skuid.com/latest/en/skuid/api/skuid_model_model.html#skuid.model.Model.updateRows
I've tried the following variants in my try{} block, the result is the same TypeError: Cannot read property 'each' of undefined.
Variant 1:
var rowsToUpdate = {}; $.each( model.getRows(), function() { rowsToUpdate[this.Id] = { Award_letter_sent__c: sentDate,
Award_Letter_Signed__c: signedDate }; }); ```
model.updateRows( rowsToUpdate );```
Variant 2:
```
var rows [];
```
```
rows = model.getRows();
```
$.each(rows, function(row) {
model.updateRow(row, {
Award_letter_sent__c: sentDate,
Award_Letter_Signed__c: signedDate
}); });```