在elm中使用端口进行渲染

在elm中使用端口进行渲染,elm,Elm,我想使用elm中的flot.js 2D绘图库。我最初以为我会为它编写一个本地包装,但似乎对此感到失望。因此,我想尝试使用端口将要打印的值发送到JavaScript(即在JavaScript端调用flot.js)。这可能吗?我不明白为什么不可能。您可以在elm中构建一个包含flot.js指令的数据结构(或者在您的示例中可能只是一个点数组),并通过端口将该指令集传递给javascript。然后在javascript中处理指令并调用flot.js。是的,您可以使用端口从Elm发送数据以绘制成flot图

我想使用elm中的flot.js 2D绘图库。我最初以为我会为它编写一个本地包装,但似乎对此感到失望。因此,我想尝试使用端口将要打印的值发送到JavaScript(即在JavaScript端调用flot.js)。这可能吗?

我不明白为什么不可能。您可以在elm中构建一个包含flot.js指令的数据结构(或者在您的示例中可能只是一个点数组),并通过端口将该指令集传递给javascript。然后在javascript中处理指令并调用flot.js。

是的,您可以使用端口从Elm发送数据以绘制成flot图。下面是使用Elm作为数据源对的重写

port flotExample1:List(List(可能是List Float)))
flotExample1港=
让
半步走14=
List.map(\x->x/2)[0..28]
d1=
List.map(\x->Just[x,sin x])半步sto14
d2=
List.map只是[[0,3],[4,8],[8,5],[9,13]]
d3=
[Just[0,12],Just[7,12],没事,Just[7,2.5],Just[12,2.5]]
在里面
[d1、d2、d3]
Elm将把端口中的基本Elm数据类型转换为另一端的Javascript类型。上述函数签名中的
可能
是为了说明空值可用于分离Flot中的线段这一事实(参见示例
d3


var app=Elm.worker(Elm.Main);
$(函数(){
$.plot(“#占位符”,app.ports.flotExample1);
});

您可以制作更复杂的示例,例如从Elm访问服务器URL,或者绑定其他信号,如时间或鼠标移动(在这种情况下,您的端口签名将是一个
信号(List(List(可能是(List Float)))
),但它仍将围绕端口旋转。

我选择您的答案,因为它看起来更惯用。但是,是什么阻止我们创建一个信号字符串类型的“eval”端口&在脚本标记中对其运行eval?我敢肯定Evan Czaplicki会被吓坏的……当然,你可以创建一个
eval()
端口订阅服务器,并在elm中连接JavaScript字符串,但这有点违背了使用elm的初衷。端口的边界层提供了JavaScript和类型安全的纯elm代码的清晰分离。我想,如果你想通过生成JavaScript字符串进行评估来模糊这条线的话,那就是自讨苦吃。我就是这么想的。我认为这样做是一种快速而肮脏的黑客行为,可以使用一个现有的JavaScript库,比如flot.js,因为本地模块看起来就像是一个射自己脚的食谱。。。