【问题标题】:how to handle with nested objects from js in dart (new dart-js-interop)如何在 dart 中处理来自 js 的嵌套对象(新 dart-js-interop)
【发布时间】:2016-07-16 00:32:07
【问题描述】:

我为 Outlook Office365 创建了加载项,并使用他们的office.js 能够从电子邮件中获取信息。

dart.js 示例:

js.context['Office']['context']['mailbox']['userProfile']['emailAddress']

js.context['Office']['context']['mailbox']['item']['to'].callMethod('getAsync', [callback(result)])

我如何使用新的dart-js-interop 来满足这些需求?

【问题讨论】:

    标签: dart dart-js-interop


    【解决方案1】:
    @JS('Office.context.mailbox.userProfile.emailAddress')
    external get emailAddress;
    
    @JS('Office.context.mailbox.item.to.getAsync')
    external getAsync(Function callback);
    

    当您调用getAsync 时,您需要使用allowInteropallowInteropCaptureThis 包装您传递给回调的函数

    getAsync(allowInterop((x) => print(x)));
    

    谨慎尝试。几个月前我玩了一点新的 dart-js-interop,但我自己还没有在实际代码中使用它。

    【讨论】:

    • 非常感谢!它可以帮助我进行静态通话。是的,它实际上是mailbox :)
    • 对了,JSObjectImpl怎么处理?它没有callMethod()['fieldName'] 等方法。
    • 不确定,我想您需要将其转换为具体类型。你从哪里得到它?
    • 我尝试投射,但总是JSObjectImpl 的实例。它来自js_dartium.dart: ' class JSObjectImpl extends JSObject $implementsClause { JSObjectImpl.internal() : super.internal(); }'
    • JSArrayImpl 实现了 List,所以你可以这样索引它。它没有字段名称,它是一个数组。对于 JSObjectImpl 表示你没有包装的东西,你需要包装它,或者它确实有一个你应该能够使用的下标运算符。
    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多