7

Firebase键值存储看起来很有趣,与 Dart 的 HTML 框架一起使用会很有趣。

他们提供了一个 JavaScript 库来读取/写入他们的模型。有没有人尝试将它与 Dart 一起使用?

我的计划(基于很少的 Dart 知识)是:

  • 在我的 html 中包含他们的库
  • 加载 js.dart 包
  • 通过 js.dart 实例化一个模型
  • 通过模型读写。

这看起来是正确的方法吗?或者,有更好的方法吗?

谢谢

4

3 回答 3

10

您可以通过js 包使用任何 Javascript 库。

对于Firebase,您必须:

  • js 包添加到您的pubspec.yaml
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'}));
}

上面的 Dart 代码等价于下面的 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}).

于 2013-02-16T11:27:52.333 回答
1

现在 Dart 中有一个 firebase.js 库的包装器:https ://github.com/firebase/firebase-dart/ (也可以在 pub 上找到)。它使用 dart:js ,如本线程中所述,因此仍然需要包含 firebase.js!

于 2014-01-02T19:38:21.730 回答
0

当 Dart 到达这里时,我收到错误消息“异常中断:ReferenceError:ReceivePortSync 未定义”。

    js.scoped (() {

    });

需要一行额外的代码才能将 Firebase 与 Dart 结合使用。添加行“packages/browser/interop.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>

----------------- 编辑 8 月 15 日 ----------

js.scoped is no longer needed in the newer version of interopt.js 
于 2013-08-01T00:03:46.750 回答