2015-09-17 3 views
2

enter image description hereКак сохранить объект в области видимости?

Я реализую следующие функции. Большая часть страницы создается один раз в моем файле entryPage.php. Таблица «Этап» создается через AJAX. Позвоните по адресу stageArea.php. Моя проблема заключается в том, что мой объект данных создается в $(document).ready(function() {...}, к которому не могут получить доступ другие мои функции за пределами $(document).ready(function() {...}.

entryPage.php

...HTML... 
<script> 
    $(document).ready(function() { 

    var dataObject = new DataEntryObj(); // create the data object 

    $.post("../stageArea.php", {array : dataObject.dataArray}, function(data){ 
     $('#stageArea').html(data); 
    }); 
    } 
    var DataEntryObj = function(){ 
    this.dataArray = [[0,0,0,0,0,0,0,3,0]]; 
    .... 
    } 

    function updateData(value, row, index){ 
    alert("update:" + row + " " + index + " " + value); //values come in OK 
    alert(dataObject.dataArray[row][index]); // but the data Object isn't here 
    dataObject.dataArray[row][index] = value; // so this cannot be assigned 

    $.post("../stageArea.php", {array : dataObject.dataArray}, function(data){ 
     $('#stageArea').html(data); 
    }); 
    } 
</script> 

Что является хорошим решением, чтобы сохранить объект в том же объеме, как и другие функции?

+0

'$ (document) .ready (function() {})' missing closed ')'? Где 'updateData' называется?, Перед' .ready() 'event? – guest271314

ответ

5

Просто объявить var за пределами $(document).ready, а затем присвоить это значение без использования var

var dataObject ; 
$(document).ready(function() { 

    dataObject = new DataEntryObj(); // create the data object 
    ...... 

}); 

Это теперь будет эквивалентно window.dataObject

+0

Это дает мне следующую консольную ошибку: Uncaught TypeError: DataEntryObj не является функцией –

+1

, тогда вы, возможно, включили декларацию функции DataEntryObj внутри другой функции. Функции такие же, как и переменные, когда дело касается доступности области – charlietfl

1

Вы можете определить глобальную переменную, но вы должны убедиться, что updateData пытается получить доступ к dataObject после того, как DOM станет доступным

var dataObject, DataEntryObj; 

DataEntryObj = function(){ 
    this.dataArray = [[0,0,0,0,0,0,0,3,0]]; 
} 

$(document).ready(function() { 

    dataObject = new DataEntryObj(); 

    $.post("../stageArea.php", {array : dataObject.dataArray}, function(data){ 
    $('#stageArea').html(data); 
    }); 

} 

function updateData(value, row, index) { 
    // will have ref to dataObject changed by $(document) 
} 
0

Вы не можете получить доступ к dataObject varailable. Потому что вы настроены в функции. Вы должны создать глобальную переменную объекта, и вы можете получить доступ повсюду.

var dataObject = { data: null }; 

$(document).ready(function() { 

    dataObject.data = new DataEntryObj(); // create the data object 

    $.post("../stageArea.php", {array : dataObject.data.dataArray}, function(data){ 
     $('#stageArea').html(data); 
    }); 
    } 
    var DataEntryObj = function(){ 
    this.dataArray = [[0,0,0,0,0,0,0,3,0]]; 
    } 

    function updateData(value, row, index){ 

    alert("update:" + row + " " + index + " " + value); 
    alert(dataObject.data.dataArray[row][index]); 
    dataObject.data.dataArray[row][index] = value; 

    $.post("../stageArea.php", {array : dataObject.data.dataArray}, function(data){ 
     $('#stageArea').html(data); 
    }); 
}