2013-02-15 72 views
7

Firebase鍵值存儲看起來很有趣,並且與Dart的HTML框架一起使用會很有趣。有沒有人試過使用Dart內的Firebase JavaScript庫?

他們提供了一個用於讀/寫他們的模型的JavaScript庫。有沒有人試過用Dart使用它?

我的計劃(基於非常小飛鏢知識)是:

  • 包括他們的圖書館在我的HTML
  • 裝入js.dart包
  • 通過js.dart
  • 實例化一個模型
  • 通過模型進行讀寫。

這似乎是正確的做法?或者,有沒有更好的方法呢?

感謝

+0

[Firebase創始人]沒有意識到有人試圖這樣做,但我很樂意看到它的工作。如果你得到一個實施工作,請讓我們知道! – 2013-02-16 01:17:49

+0

嗨,安迪,你能夠得到這個嗎?我是看着爲個人項目做同樣的事情。 – Riz 2013-08-20 17:30:36

+0

有趣的你應該問。我剛回來看看Dart。有這麼多喜歡它。我只希望它實際上是Smalltalk ;-)無論如何,簡短的答案是'不',但在線程底部的一些信息看起來很有希望。 – 2013-08-21 00:23:41

回答

10

你可以通過js package使用任何JavaScript庫。

對於Firebase你必須:

dependencies: 
    js: any 
  • 添加以下<script>到你的HTML頁面:
<script src='https://cdn.firebase.com/v0/firebase.js'></script> 
<script type="application/dart" src="youDartCode.dart"></script> 
<script src="packages/browser/dart.js"></script> 
<script src="packages/browser/interop.js"></script> 
import 'package:js/js.dart' as js; 

void main() { 
    final myDataRef = new js.Proxy(js.context.Firebase, 
     'https://xxx.firebaseio-demo.com/'); 
    myDataRef.on('child_added', (snapshot, String previousChildName) { 
    final message = snapshot.val(); 
    print("${message.name} : ${message.text}"); 
    }); 
    myDataRef.push(js.map({"name": 'myName', "text": 'js interop rocks'})); 
} 

以上達特代碼是下面的JavaScript代碼相當於:

var myDataRef = new Firebase('https://xxx.firebaseio-demo.com/'); 
myDataRef.on('child_added', function(snapshot, previousChildName) { 
    var message = snapshot.val(); 
    console.log(message.name + " : " + message.text); 
})); 
myDataRef.push({name: 'myName', text: 'js interop rocks'}); 

基本上是:

  • 時,你必須實例化一個Javascript對象,使用new js.Proxy(js.context.MyJavascriptObjectName, arg1, arg2, arg3))

  • 當您必須提供Javascript匿名對象時,請使用js.map({'attr1', value1}, {'attr2', value2})

+0

太棒了!非常感謝 – 2013-02-16 18:56:10

+1

自該初始線程以來,已經過了很多時間。現在,pub中有一個firebase包:https://pub.dartlang.org/packages/firebase – Aaron 2014-11-14 11:38:18

+0

在更新版本的dart中,與javascript interop交互的語法已更改。此示例不適用於Firebase 3.0。 – BeatingToADifferentRobot 2016-06-17 16:54:26

0

當Dart到達這裏時,我收到了錯誤信息「Breaking on exception:ReferenceError:ReceivePortSync is not defined」。

js.scoped (() { 

    }); 

需要額外的代碼行才能使用Firebase與Dart。添加行「包/瀏覽器/互操作。JS」

<script type="application/dart" src="ScrollViewDemo.dart"></script> 
    <script src="packages/browser/dart.js"></script> 
    <script src="packages/browser/interop.js"></script> 
    <script src='https://cdn.firebase.com/v0/firebase.js'></script> 

-----------------編輯08月15日----------

js.scoped is no longer needed in the newer version of interopt.js 
+1

提交我的答案後,_js_包引入了'interop.js'。我已經更新了它。謝謝。 – 2013-08-01 12:40:34