0

作为一个实验,我正在用 dart 和 easyrtc 尝试一些东西。我开始将(通常通过 nodejs 服务器提供服务,在此处找到)移植到 dart 版本,这就是我用它制作的

编辑:我发现代码的哪一部分导致了错误。这是for循环无法运行的数据对象代理。通常,setRoomOccupantListener 函数将房间的名称和所有连接到房间的对等对象作为参数提供。我已经在普通 javascript 中制作了对象布局的屏幕截图,就像我在 chrome 中调试时的外观一样,在此处找到。

function connect() {
  easyrtc.setRoomOccupantListener(convertListToButtons);
 }

function convertListToButtons (roomName, data, isPrimary) {
  clearConnectList();
  var otherClientDiv = document.getElementById("otherClients");
  for(var easyrtcid in data) {
    var button = document.createElement("button");
    button.onclick = function(easyrtcid) {
      return function() {
        performCall(easyrtcid);
      };
    }(easyrtcid);

    var label = document.createTextNode(easyrtc.idToName(easyrtcid));
    button.appendChild(label);
    otherClientDiv.appendChild(button);
  }
}

这是我铬中调试飞镖代码时的屏幕截图

void connect() {
  easyrtc.setRoomOccupantListener(convertListToButtons);
  } 

void convertListToButtons(roomName, data, isPrimary) {
  clearConnectList();
  var otherClientDiv = querySelector("#otherClients");
  for (var easyrtcid in data) {
    var button = document.createElement("button");
    button.onClick.listen((event) {
      performCall(easyrtcid);
    });

    button.appendText(easyrtc.idToName(easyrtcid));
    otherClientDiv.append(button);
  }
}

这是我得到的错误:

Class 'Proxy' has no instance getter 'iterator'.

NoSuchMethodError: method not found: 'iterator' Receiver: Instance of 'Proxy' Arguments: []
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
#1      P...<omitted>...7)

我在这里遗漏了一些简单的东西还是某种不兼容?谢谢你。

4

2 回答 2

1

我看你也可以用import package:js/js.dart';。我不知道怎么用

你可以试试

import 'dart:js' as js;

https://www.dartlang.org/articles/js-dart-interop/

这看起来也很奇怪

easyrtc = js.context.easyrtc; // <== here you have context 'easyrtc'

easyrtc.easyApp('easyrtc.audioVideo', 'selfVideo', new js.JsObject.jsify(['callerVideo']), loginSuccess, loginFailure); 
// and here again 'easyrtc.audioVideo', I guess this is one to much

尝试

easyrtc.easyApp.callMethod('audioVideo', ['selfVideo', js.JsObject.jsify(['callerVideo']), loginSuccess, loginFailure]); 

其中 'audioVideo' 是被调用的方法,其余的是参数

easyrtc.callMethod('easyApp', ['audioVideo', 'selfVideo', js.JsObject.jsify(['callerVideo']), loginSuccess, loginFailure]); 

其中“easyApp”是被调用的方法,其余的是参数。

如果您可以添加代码在 JavaScript 中的外观,我可以创建更好的示例。

于 2014-05-18T12:59:16.123 回答
1

dart:js package:js不直接处理 Dart List。所以以下行:

  easyrtc.easyApp('easyrtc.audioVideo', 'selfVideo', 
      ['callerVideo'], loginSuccess, loginFailure);

应该 :

  easyrtc.easyApp('easyrtc.audioVideo', 'selfVideo', 
      js.array(['callerVideo']), loginSuccess, loginFailure);

另请参阅dart:js 和 js 包有什么区别?

于 2014-05-18T19:53:03.277 回答