【问题标题】:JayData "Uncaught RangeError: Maximum call stack size exceeded"JayData“未捕获 RangeError:超出最大调用堆栈大小”
【发布时间】:2013-02-21 14:40:01
【问题描述】:

有一个模型,我希望能够通过执行以下操作记录连接的设备类型:

var connections = DataLayer.context.ConnectionSet.filter(function(item) {
     return item.Id == id;
}, {id: 1});

connections.forEach(function(item) {
     console.log(item.Sender.Device.DeviceType);
});

item.Sender.Device.DeviceType 导致此错误: Uncaught RangeError: Maximum call stack size exceeded

这是我的模型:

 $data.Entity.extend('SubliminalData.Connection', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'Sender': { 'type':'SubliminalData.DevicePort','required':true },
    'Receiver': { 'type':'SubliminalData.DevicePort','required':true }
  });

  $data.Entity.extend('SubliminalData.Device', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'DeviceType': { 'type':'Edm.String','nullable':false,'required':true }
  });

  $data.Entity.extend('SubliminalData.Port', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true }
  });

  $data.Entity.extend('SubliminalData.DevicePort', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'Device': { 'type':'SubliminalData.Device','required':true },
    'Port': { 'type':'SubliminalData.Port','required':true }
  });

为什么这会给我一个最大调用异常,我该如何解决?没找到。

--更新--

我最近一直在尝试让它工作,并且我已经更改了我的模型,以便我拥有向后导航属性。现在更有意义了,但现在我遇到了另一个问题。

新模型:

$data.Entity.extend('SubliminalData.Connection', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'Sender': { 'type':'SubliminalData.DevicePort','required':true,'inverseProperty':'SendingConnections' },
    'Receiver': { 'type':'SubliminalData.DevicePort','required':true,'inverseProperty':'ReceivingConnections' }
  });

  $data.Entity.extend('SubliminalData.Device', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'DeviceType': { 'type':'Edm.String','nullable':false,'required':true },
    'DevicePorts': { 'type':'Array','elementType':'SubliminalData.DevicePort','inverseProperty':'Device' }
  });

  $data.Entity.extend('SubliminalData.Port', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'PortType': { 'type':'Edm.String','nullable':false,'required':true },
    'DevicePorts': { 'type':'Array','elementType':'SubliminalData.DevicePort','inverseProperty':'Port' }
  });

  $data.Entity.extend('SubliminalData.DevicePort', {
    'Id': { 'key':true,'type':'Edm.Int32','nullable':false,'computed':true },
    'Device': { 'type':'SubliminalData.Device','required':true,'inverseProperty':'DevicePorts' },
    'Port': { 'type':'SubliminalData.Port','required':true,'inverseProperty':'DevicePorts' },
    'SendingConnections': { 'type':'Array','elementType':'SubliminalData.Connection','inverseProperty':'Sender' },
    'ReceivingConnections': { 'type':'Array','elementType':'SubliminalData.Connection','inverseProperty':'Receiver' }
  });

  $data.EntityContext.extend('DataLayer.SubliminalDataContainer', {
    'ConnectionSet': { type: $data.EntitySet, elementType: SubliminalData.Connection },
    'DeviceSet': { type: $data.EntitySet, elementType: SubliminalData.Device },
    'PortSet': { type: $data.EntitySet, elementType: SubliminalData.Port },
    'DevicePortSet': { type: $data.EntitySet, elementType: SubliminalData.DevicePort }
  });

  $data.generatedContexts = $data.generatedContexts || [];
  $data.generatedContexts.push(DataLayer.SubliminalDataContainer);

  /*Context Instance*/
  DataLayer.context = new DataLayer.SubliminalDataContainer( { name:'oData', oDataServiceHost: 'http://localhost:57703/WcfDataService1.svc' });

我的新问题是这样的:

var connections = DataLayer.context.ConnectionSet.filter(function(item) {
        return item.Id == id;
    }, {id: 1});

connections.forEach(function(item) {
    l(item); //works great!
    l(item.Sender); //undefined :[

});

为什么我的发件人未定义?我以为我了解 JayData,但我相信我不了解。

【问题讨论】:

    标签: javascript wcf-data-services svc jaydata


    【解决方案1】:

    您的代码看起来不错,我们认为您从代码的其他部分收到此错误, 很可能来自递归函数调用。 你能用你的代码创建一个 jsfiddle 以便我们测试它吗?

    【讨论】:

    • 抱歉,信息太少我们帮不上忙,请提供更多信息
    • 我的问题已经改变了,也许你能帮忙解决一下?我已经更新了描述
    • 你必须包含它 filter(..).include('Sender')
    猜你喜欢
    • 2018-01-24
    • 2015-10-28
    • 2014-08-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多