1
私は特にHandsontableとJS、JSONの使用法についてかなり新しくなっています。どんな助けもありがとう。 131行目のデバッガでは、 'data [row] .temp_source_data' =未定義です。 なぜ値が返されないのかわかりません。私はjsファイルを含めました。ありがとう!Handsontable JSONは未定義を返します
var hot;
var hotContainer;
var invalidCells = 0;
var forceRender = false;
var vendorSites = [];
var defaultVendorSite;
var gValidPo = true;
var supplier_number = [];
var data = [];
var errorIcon = '<i class="fa fa-exclamation-triangle fa-lg" style="color:red;"></i>';
// Create empty handsontable instance
function createEmptyHot(pRegion){
setHotContainer(pRegion);
hotContainer.height = getMaxHeight();
assembleHot(hotContainer, data, getMaxHeight(hotContainer));
}
function setHotContainer(pId){
hotContainer = document.getElementById(pId);
}
// Get max height of the handsontable instance
function getMaxHeight(){
var maxHeight = (window.innerHeight - jQuery(hotContainer).offset().top * .8);
return maxHeight;
}
//Assemble the handsontable instance
function assembleHot(pContainer, pData, pHeight){
// Hook functions
// Handle before change event
function handleBeforeChange(changes, source) {
var prop = "supplier_number";
var row;
var val;
for (var i = 0; i < changes.length; i++) {
if (changes[i][1] === prop && changes[i][2] !== changes[i][3]) {
row = changes[i][0];
val = changes[i][3];
if (hot.getData()[row].supplier_site) {
hot.getData()[row].supplier_site = '';
}
apex.server.process('GET VENDOR SITES',
{x01: val},
{async: false,
dataType: "json",
success:function(pData){
hot.getData()[row].temp_source_data = pData;
console.log(pData); //DR
}
}
);
}
}
}
hot = new Handsontable(pContainer, {
data:pData,
rowHeaders:true,
colHeaders: [
"<strong>Supplier Number<span class='required'>*</span></strong>",
"<strong>Supplier Site</strong>",
"<strong>Invoice Date</strong>",
"<strong>Invoice Number</strong>",
"<strong>Task Number</strong>",
"<strong>Project Number</strong>",
"<strong>Line Description</strong>",
"<strong>Expenditure Type</strong>",
"<strong>Ext Price</strong>",
"<strong>Tax Amount</strong>",
"<strong>Status</strong>"
],
contextMenu:true,
minSpareRows:pHeight/28,
minCols:16,
maxCols:16,
height:pHeight,
beforeChange: handleBeforeChange,
columns: [
{
data:"supplier_number",
},
{
data:"supplier_site",
type:"dropdown",
source:vendorSites,
width:250
},
{
data:"invoice_date",
type:"date",
dateFormat:"MM.DD.YYYY"
},
{
data:"invoice_num"
},
{
data:"task_num"
},
{
data:"project"
},
{
data:"line_description"
},
{
data:"expenditure_type",
width: 250
},
{
data:"ext_price",
type:"numeric",
format:"$0,0.00",
language:"en"
},
{
data:"tax_amount",
type:"numeric",
format:"$0,0.00",
language:"en"
},
{data:"status",
readOnly:true,
renderer:invalidRowRenderer}
],
cells: function(row, col, prop){
if (prop === 'supplier_site') {
var cellProperties = this;
var vendorSites = data[row].temp_source_data;
var vendorSitesArr = [];
if (vendorSites && vendorSites.length) {
for (var i = 0; i < vendorSites.length; i++) {
vendorSitesArr.push(vendorSites[i].supplier_site);
}
cellProperties.source = vendorSitesArr;
hot.getData()[row][prop] = vendorSitesArr[0];
}
}
}
});
}
// Renderers
function invalidRowRenderer(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
$(td).empty();
var isInvalid = instance.getData()[row].has_error;
if (isInvalid) {
$(td).append(errorIcon);
td.style.textAlign = 'center';
}
td.style.backgroundColor = '#E8E8E8';
}
/* If row has error, append error icon and highlight row kakhi.
function errorInRowRenderer(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
var isInvalid = instance.getData()[row].has_error;
if (isInvalid) {
$(td).append(errorIcon);
td.style.textAlign = 'center';
}
td.style.backgroundColor = '#E8E8E8';
row.style.backgroundColor = 'kakhi';
}
*/
// Get all handsontable data
function getHotData(){
return hot.getData();
}
// Do ajax with Handsontable data
function doAjax(){
var data = JSON.parse(JSON.stringify(getHotData()));
// Remove empty lines
for (var i = 0; i < data.length; i++){
if (jQuery.isEmptyObject(data[i])){
data.splice(i, 1);
i--;
}
}
}
// Validate handsontable data before submit
function validateHotData(){
var data = {data:[]};
var tempObj;
for (var i = 0; i < hot.getData().length; i++){
delete hot.getData()[i].has_error;
if (!isEmptyRow(i)) {
tempObj = {};
tempObj = JSON.parse(JSON.stringify(hot.getData()[i]));
tempObj.hot_idx = i;
data.data.push(tempObj);
}
}
apex.server.process('STAGE DATA',
{p_clob_01: JSON.stringify(data)},
{success:function(pData) {
// If we have invalid rows, flag them
if (pData.length > 0) {
for (var i = 0; i < pData.length; i++) {
rownum = pData[i].rownum;
hot.getData()[rownum].has_error = true;
}
hot.render();
} else {
for (var i = 0; i < hot.getData().length; i++) {
delete hot.getData()[i].has_error;
}
hot.render();
}
}
}
)
}
function handleSubmit(){
forceRender = true;
// Validate the data set
var validity = validateHotData();
if (validity){
doAjax();
}
}
// Utility - determine if a hot row is empty
function isEmptyRow(row) {
delete hot.getData()[row].temp_source_data;
delete hot.getData()[row].status;
delete hot.getData()[row].has_error;
if (jQuery.isEmptyObject(hot.getData()[row])) {
return true;
} else {
return false;
}
}
いいえ、私はありません。ヘッドアップをありがとう!! – DR1
問題はありません!それは簡単な修正だったのでうれしいです。 :) – adriennetacke