2013-05-16 60 views
1

商店和JavaScript庫容器存儲和檢索谷歌飛鏢對象的JavaScript庫容器

在我使用的是外部JavaScript庫做各種矩陣計算DART應用程序獲取谷歌飛鏢對象。

庫的特定功能並不重要,重要的是我需要存儲和檢索放入矩陣中的Dart對象。

達特類 - 允許圖像我有一個鏢對象,該對象具有稱爲名稱

MyDartClass mydc = new MyDartClass(something, something); 
mydc.name; 
// Everything works as planned 

參數存儲

matrix = js.context.matrix 
matrix.cell(1,1).store("thing", new MyDartClass(something, something)); 

檢索

matrix.cell(1,1).has_object_of_type("thing"); 
// true 
MyDartClass mydc = matrix.cell(1,1).retrieve("thing"); 

做一些與對象

mydc.name; 
// Exception: The null object does not have a getter 'name'. 
// NoSuchMethodError : method not found: 'name' 
// Receiver: null 
// Arguments: [] 

圖書館是否真的有用嗎?
是的。我已經在純JavaScript中做了完全相同的事情很多次,並且有很多測試來測試行爲(使用Javascript)

Dart Broken?
當我嘗試使用javascripti Hash來做同樣的行爲時,它就像一個魅力。

var options = js.map({ 'dart' : new MyDartclass(something, something)); 
    var y = options["dart"]; 
    js.context.console.log(y.name); 
    // Name is printed 

你從檢索中得到什麼?
看來,我獲得某種飛鏢代理的

MyDartClass mydc = matrix.cell(1,1). retrieve("thing"); 
    js.context.console.log(mydc); 

DartProxy {id: "dart-ref-20", port: DartSendPortSync} 
id: "dart-ref-20" 
port: DartSendPortSync 
__proto__: DartProxy 

我相信是的lib存儲對象,在內心深處,在一個哈希表。但是,當我將對象放入Dart時,我似乎得到了一些東西,但並不是我可以使用它的方式。所以我需要幫助因爲我不知道如何使它工作。

  • 是否需要刪除對象?
  • 也許這是一個飛鏢錯誤,當你嘗試從對象內部的哈希中檢索對象
  • 也許我錯過了一切,這是不應該工作。

回答

2

在同一範圍內傳遞和檢索飛鏢對象正在工作。有下面的測試情況the tests of js-interop到坡口之:

test('retrieve same dart Object',() { 
    final date = new DateTime.now(); 
    js.context.dartDate = date; 
    expect(js.context.dartDate, equals(date)); 
}); 

但是似乎有與多個範圍的問題(和多個事件循環以及)。目前沒有辦法保留飛鏢對象。所以你的飛鏢對象引用會在範圍的末尾消失。下面是一個失敗的簡單的測試用例:

file an issue

+0

嗨亞歷山大。感謝你的回答。我在https://github.com/dart-lang/js-interop/issues/80創建了一個問題。這幾乎是答案的後半部分,並回到這個問題。最好的問候喬納斯 –