0

これを行うことにより、接続のデバイスタイプをログに記録できるようにしたいモデルがあります。

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を理解していると思いましたが、理解していないと信じています。

4

1 に答える 1

1

コードは問題ないように見えます。このエラーは、コードの他の部分から、おそらく再帰関数呼び出しから発生すると考えられます。テストできるように、コードを使用してjsfiddleを作成できますか?

于 2013-02-21T15:50:04.507 に答える