【问题标题】:How to make window.prompt in Dart?如何在 Dart 中制作 window.prompt?
【发布时间】:2013-11-18 21:35:51
【问题描述】:

我使用 Dart 制作了一些应用程序,我有一个简单的问题。我没有在 dart:html 库中找到提示对话框。我发现只有警报和确认对话调用,但这不是我需要的。我已经尝试了 Dart api 的其他一些可能性,但没有办法做到这一点。我认为应该有模态对话框或 Dart 自己的提示对话框之类的东西。我知道,modal 在这里,但它只在弹出窗口中加载另一个文件。

有人可以帮帮我吗?


更新:实际上,我找到了一种解决方案。它是 dart:js 库中 JavaScript 的模拟:

var password=context.callMethod('prompt',['Password','']);

这是一个很好的解决方案,但我认为,一定有比模拟 JavaScript 更好的方法。


更新 2: 由于 Dart 规范中提示对话框的不足,Dart API 和 Dart 库 here 是 Google 代码问题跟踪器上的一个错误,所以让我们star这个错误,如果你认为提示在规范中很重要,或者如果你有任何其他想法,如何以现代方式做到这一点(你可以尝试提出类似内置的例如模态对话框)。或者,如果您认为提示/模态对话框实现也应该使用现代编程语言,请分享它...


更新 3: 现在我们正在讨论新的模态警报、确认和提示对话框,它们可能位于 Polymer.dart 库中。 Here 是 Google 代码问题跟踪器的增强功能,所以让我们 star 该错误,如果您喜欢该对话框的现代模式形式,或者讨论,如果您知道如何做得更好...

【问题讨论】:

  • 这个替换 prompt() 方法不需要在 Window 对象上。它可以在单独的包中实现。
  • 是的,可以。我想,它可以附属于 ModalDialog 包,但也可以在 Polymer UI 元素或其他任何地方实现。它可以是模态对话框、UI 元素或 Dart 中它自己的独立单元。但它应该存在于 Dart 中,你知道的。

标签: dart dart-html dart-js-interop


【解决方案1】:

您可以使用 js 互操作来做到这一点:

import 'dart:js';

main() {
  var result = context.callMethod('prompt', ['Hello from Dart!']);
  print(result);
}

我不确定为什么在 dart:html 中没有此功能。也许提交bug

理想情况下,您可以使用另一个 UI 组件库来执行此操作,而不是使用 window.prompt()。类似于these。但现在还处于早期阶段,我不确定是否有一个好的库可用。

更新:

window.prompt() 已被有意从 dart:html 中删除,以阻止其使用,因为它会阻止脚本的执行。

【讨论】:

  • 但正如我所写,我知道 js 互操作,我发现了一个现有的错误(它的声明是固定的,但没有人知道如何......)而且我还在规范中找到了 modal,但它不符合我的需要...谢谢你的模态库。我想,如果没有其他更好更简单的方法,我会用它来代替 js 互操作函数。
  • Window.prompt() 有点像 90 年代的 hack。例如,在打开时,它将阻止页面上的所有其他 javascript 运行。绝对更好地使用其他东西。但我同意,有时在做一个快速原型时 window.prompt() 很有用。在这里为您提交了一个错误 - code.google.com/p/dart/issues/detail?id=15170
  • 我知道。但是你写的模态在我看来真的很好。我只需要等到它的开发人员将其重写为 Polymer 分支。我不想使用编写原始 Widget.dart 库的已弃用 Dart Web UI...
猜你喜欢
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
相关资源
最近更新 更多