Как вы используете возвращаемое значение true в дартс? - PullRequest
1 голос
/ 19 января 2012

Я получаю следующую ошибку при попытке выполнить приведенный ниже код.

Uncaught TypeError: У объекта true нет метода 'dartObjectLocalStorage $ getter'

Я началвеб-приложение в Dart Editor версии 0.1.0.201201150611, сборка 3331. Ниже приведен полный код файла одинокого дротика.Утверждение 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)

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Ошибка указывает, что где-то в вашем коде к полю 'dartObjectLocalStorage' осуществляется доступ к логическому значению true. Данный фрагмент кода не содержит этот идентификатор и, следовательно, вероятно, не несет ответственности за ошибку. Возможно, в отчете об ошибке указан неправильный номер строки (возможно, даже неправильный файл).

Для отладки:

  • попробуйте найти ссылку на 'dartObjectLocalStorage' в вашем коде.
  • попробуйте найти ссылку на 'dartObjectLocalStorage $ getter' в сгенерированном коде.
  • запустить на ВМ или скомпилировать с другим компилятором (frogc vs dartc).

удачи.

1 голос
/ 19 января 2012

Согласно документации для WebGLRenderingContext тип возвращаемого значения - Object, если вы знаете, что объект является bool, вы можете просто использовать его как bool или динамический

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

или более явно

var v = gl.getShaderParameter (vertexShader, WebGLRenderingContext.ATUS.IUS.IUS.IUS).1013 *

и затем используйте его в своем условном выражении.Также попробуйте скомпилировать его с помощью frogc , а не компилятором JavaScript, это обычно приводит к лучшим ошибкам.

...