如何保持对象的范围?

时间:2015-09-17 19:50:49

标签: javascript jquery object scope

enter image description here

我正在实现以下功能。该页面的大部分内容在我的 entryPage.php 文件中创建一次。 “Stage”表是通过对 stageArea.php AJAX 调用创建的。我的问题是我的数据对象是在<ItemGroup> <Proto Include="Person.proto" /> <Compile Include="Person.cs"> <DependentUpon>Person.proto</DependentUpon> </Compile> </ItemGroup> <PropertyGroup> <CompileDependsOn>ProtobufGenerate;$(CompileDependsOn)</CompileDependsOn> </PropertyGroup> <Target Name="ProtobufGenerate" Inputs="@(Proto)" Outputs="@(Proto->'$(ProjectDir)%(Filename).cs')"> <ItemGroup> <_protoc Include="..\packages\Google.Protobuf.*\tools\protoc.exe" /> </ItemGroup> <Error Condition="!Exists(@(_protoc))" Text="Could not find protoc.exe" /> <Exec Command="&quot;@(_protoc)&quot; &quot;--csharp_out=$(ProjectDir.TrimEnd('\'))&quot; @(Proto->'%(Identity)',' ')" WorkingDirectory="$(ProjectDir)" /> </Target> 中创建的,$(document).ready(function() {...}以外的其他函数无法访问。

entryPage.php

$(document).ready(function() {...}

将对象保持在与其他功能相同的范围内有什么好的解决方案?

3 个答案:

答案 0 :(得分:5)

只需在var之外声明$(document).ready,然后在不使用var的情况下指定其值

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

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

});

现在这相当于window.dataObject

答案 1 :(得分:1)

您可以定义一个全局变量,但是在DOM变得可访问后,您应该确保updateData尝试访问dataObject

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)
}

答案 2 :(得分: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);
    });
}