2012-01-19 37 views
1

當我嘗試執行下面的代碼時,出現以下錯誤。如何在Dart中使用返回值true?

Uncaught TypeError: Object true has no method 'dartObjectLocalStorage$getter'

我開始在DART編輯器版本0.1.0.201201150611構建3331 Web應用程序下面是孤獨的鏢文件的完整代碼。下面評論導致錯誤的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

我無法重現錯誤,因此您使用的是DartEditor或frogc的哪個版本?你也使用本地存儲? (因爲它與dartObjectLocalStorage失敗)。 –

+0

我已經添加完整的代碼來重現問題。我在Windows上。 – Curyous

回答

1

據爲WebGLRenderingContext返回類型爲對象的文檔,如果你知道對象是布爾你可以使用它作爲一個布爾值或動態

var v=gl.getShaderParameter(vertexShader, WebGLRenderingContext.COMPILE_STATUS)

或者更明確地

var v=gl.getShaderParameter(vertexShader, WebGLRenderingContext.COMPILE_STATUS).dynamic

,然後用我t在你的條件語句中。也可以嘗試使用frogc進行編譯,而不是在JavaScript編譯器中編譯,通常會導致更好的錯誤。

+0

當我按照你的建議時,我得到以下錯誤:未捕獲TypeError:對象true沒有方法'dartObjectLocalStorage $ getter' – Curyous

+0

我添加了所有代碼,以便您可以看到它的調用位置。 – Curyous

2

該錯誤表明在您的代碼中的某個地方'布爾真'訪問字段'dartObjectLocalStorage'。給定的代碼片段不包含此標識符,因此可能不會對錯誤負責。 這可能是錯誤報告給出了錯誤的行號(甚至可能是錯誤的文件)。

要調試此:

  • 試圖找到在你的代碼爲 'dartObjectLocalStorage' 的參考。
  • 嘗試在生成的代碼中找到對「dartObjectLocalStorage $ getter」的引用。
  • 在虛擬機上運行或使用不同的編譯器(frogc vs dartc)進行編譯。

祝你好運。

+0

看起來這可能是編譯器的問題。這是一個非常短的測試程序,沒有提到dartObjectLocalStorage,它是Lars答案中的一行觸發錯誤。註釋掉該行會消除錯誤。我會看看我是否可以嘗試不同的編譯器。 – Curyous

+0

我不能用minfrog來編譯它。也許我會等待Dart Editor的下一個版本,然後穿過我的手指。 – Curyous

+0

我增加了關於這個問題的更多信息。 – Curyous