当我尝试执行以下代码时出现以下错误。
未捕获TypeError:对象true没有方法'dartObjectLocalStorage $ getter'
我在Dart编辑器版本0.1.0.201201150611 Build 3331中启动了Web应用程序。以下是单个dart文件的完整代码。导致错误的if语句在下面进行了评论。
#import('dart:html');
class Test3D {
CanvasElement theCanvas;
WebGLRenderingContext gl;
static String vertexShaderSrc = """
attribute vec3 aVertexPosition;
void main(void) {
gl_Position = vec4(aVertexPosition, 1.0);
}
""";
Test3D() {
}
void run() {
write("Hello World!");
// Set up canvas
theCanvas = new Element.html("<canvas></canvas>");
theCanvas.width = 100;
theCanvas.height = 100;
document.body.nodes.add(theCanvas);
// Set up context
gl = theCanvas.getContext("experimental-webgl");
gl.clearColor(0.5, 0.5, 0.5, 1.0);
gl.clear(WebGLRenderingContext.COLOR_BUFFER_BIT);
WebGLShader vertexShader = gl.createShader(WebGLRenderingContext.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
// Adding this line results in the error: Uncaught TypeError: Object true has no method 'dartObjectLocalStorage$getter
var wasSuccessful = gl.getShaderParameter(vertexShader, WebGLRenderingContext.COMPILE_STATUS);
}
void write(String message) {
// the HTML library defines a global "document" variable
document.query('#status').innerHTML = message;
}
}
void main() {
new Test3D().run();
}
我真的很喜欢飞镖,非常感谢你能给我的任何帮助。
以下是错误的控制台输出:
Uncaught TypeError: Object true has no method 'dartObjectLocalStorage$getter'
htmlimpl0a8e4b$LevelDom$Dart.wrapObject$member
htmlimpl0a8e4b$WebGLRenderingContextWrappingImplementation$Dart.getShaderParameter$member
htmlimpl0a8e4b$WebGLRenderingContextWrappingImplementation$Dart.getShaderParameter$named
unnamedb54266$Test3D$Dart.run$member
unnamedb54266$Test3D$Dart.run$named
unnamedb54266$main$member
RunEntry.isolate$current
isolate$Isolate.run
isolate$IsolateEvent.process
isolate$doOneEventLoopIteration
next
isolate$doRunEventLoop
isolate$runEventLoop
RunEntry
(anonymous function)
答案 0 :(得分:2)
错误表明在代码中的某个位置,对布尔值true访问字段'dartObjectLocalStorage'。给定的代码片段不包含此标识符,因此可能不对错误负责。 可能是错误报告给出了错误的行号(甚至可能是错误的文件)。
调试:
答案 1 :(得分:1)
根据WebGLRenderingContext的文档,返回类型是Object,如果你知道对象是bool,你可以将它用作bool或动态
var v = gl.getShaderParameter(vertexShader,WebGLRenderingContext.COMPILE_STATUS)
或更明确地
var v = gl.getShaderParameter(vertexShader,WebGLRenderingContext.COMPILE_STATUS).dynamic
然后在条件语句中使用它。另外尝试用 frogc 编译它而不是使用JavaScript编译器构建它,它通常会导致更好的错误。