Skip to content

Instantly share code, notes, and snippets.

@fostergn
Last active September 6, 2018 18:25
Show Gist options
  • Save fostergn/9ba4e5f5f5a228c3a622f4296cea0cd9 to your computer and use it in GitHub Desktop.
Save fostergn/9ba4e5f5f5a228c3a622f4296cea0cd9 to your computer and use it in GitHub Desktop.
Knack: Update Equation With Connected Record
var scene_key = 'scene_1'
var view_key = 'view_36'
var name_field_key = 'field_1'
var price_field_key = 'field_39'
var connected_record_field_key = 'field_30'
var quantity_field_key = 'field_31'
var equation_total_field = 'field_50'
var quantity_selector = 'input#' + quantity_field_key
var equation_total_selector = '#kn-input-' + equation_total_field + ' p.kn-equation'
var connected_record_selector = '#connection-picker-chosen-'+ connected_record_field_key +' .chzn-results li'
var currency = '$'
var connected_records;
// async get records
getConnectedRecords(scene_key, view_key, function(records) {
connected_records = records;
});
$(document).on('knack-view-render.view_10', function(event, scene) {
// hide connected table
// could be on a separate page to avoid doing this
$('#view_36').hide();
$(quantity_selector).change(function() {
calculateTotal(connected_records, $(connected_record_selector + '.result-selected').text())
})
$(connected_record_selector).click(function() {
calculateTotal(connected_records, $(this).text())
})
})
function calculateTotal(connected_records, connected_record_name) {
var selected_connected_record = connected_records.find(function(record) {
return connected_record_name === record[name_field_key];
})
if (!selected_connected_record) { return }
var selected_connected_record_price = selected_connected_record[price_field_key + '_raw'];
var quantity = $(quantity_selector).val();
if (quantity < 1) { return }
var price = selected_connected_record_price * quantity;
var formatted_price = currency + price.toString()
// setting timeout to update after equation updates
setTimeout(function() {$(equation_total_selector).text(formatted_price)}, 100)
}
function getConnectedRecords(scene_key, view_key, cb) {
var connected_records;
$.ajax({
url: 'https://api.knack.com/v1/pages/'+ scene_key +'/views/'+ view_key +'/records',
type: 'GET',
headers: {
'Authorization': Knack.getUserToken(),
'X-Knack-Application-Id': Knack.application_id,
'Content-Type': 'application/json'
},
success: function(data) {
connected_records = data.records;
return cb(connected_records)
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment