Dart 通过Javascript函数传递数据绑定

Dart 通过Javascript函数传递数据绑定,dart,polymer,dart-polymer,web-component,shadow-dom,Dart,Polymer,Dart Polymer,Web Component,Shadow Dom,我正在使用聚合体和Dart生成点坐标列表。它以html格式呈现点列表。尽管如此,我还是希望使用javascript函数将点从一个坐标系转换为另一个坐标系 在HTML dart聚合物中: <template repeat="{{ p in grid_points }}"> <core-item>{{ p }}</core-item> </template> 网格点是点的列表。如何通过js函数传递p.x和p.y,并在HTML模板中以p代替p呈

我正在使用聚合体和Dart生成点坐标列表。它以html格式呈现点列表。尽管如此,我还是希望使用javascript函数将点从一个坐标系转换为另一个坐标系

在HTML dart聚合物中:

<template repeat="{{ p in grid_points }}">
    <core-item>{{ p }}</core-item>
</template>
网格点是点的列表。如何通过js函数传递p.x和p.y,并在HTML模板中以p代替p呈现结果?

您可以使用:

<template repeat="{{ p in grid_points }}">
    <core-item>{{ p | grid_to_geodetic }}</core-item>
</template>
...
<script>
  Polymer('your-element', {
    grid_to_geodetic: function(point){
       return point.x + point.y;
    }
  });
</script>

{p |网格_至_大地测量}
...
聚合物(“你的元素”{
网格到大地坐标:函数(点){
返回点.x+点.y;
}
});
过滤器取一个值并返回一个值,如果需要分别转换x和y,则必须使用常量参数指示要转换点的哪一部分,如

<template repeat="{{ p in grid_points }}">
    <core-item>{{ p | grid_to_geodetic(1) }}</core-item>
    <core-item>{{ p | grid_to_geodetic(2) }}</core-item>
</template>
...
<script>
  Polymer('your-element', {
    grid_to_geodetic: function(point, part){
       if(part == 1) return point.x;
       else return point.y;
    }
  });
</script>

{p |网格_至_大地测量(1)}
{p |网格_至_大地测量(2)}
...
聚合物(“你的元素”{
网格到大地测量:功能(点、部分){
如果(部分==1)返回点.x;
else返回点y;
}
});

多亏了ain的一些想法,我成功地调用了它:

因此,通过表达式过滤器,您可以告诉模板调用Dart函数:

<template repeat="{{ p in start_points }}">
    <core-item>{{ p | rt90_to_wgs84 }}</core-item>
</template>

我猜你的意思是“核心项目”,你把“你的元素”放在哪里?。在任何情况下,我都尝试过你所说的,但得到了一个错误:Polymer('core-item',{rt90_to_wgs84:function(point){return point.x+point.y;});异常:计算表达式“(p | rt90_to_wgs84)”时出错:类“TrainList”没有实例getter“rt90_to_wgs84”。NoSuchMethodError:method not found:'rt90_to_wgs84'Receiver:'TrainList'参数的实例:[]这就好像它试图使用Dart类,而不是创建一个新的Javascript函数,该函数最终可以调用grid_to_geodetic()不,我是说“你的元素”。我假设模板是自定义组件的一部分。。。这就是它在纯聚合物中创建的自定义组件中的工作原理,我自己不使用Dart,所以我不知道它如何改变情况,对不起。嗯,你实际上可以尝试使用简单的旧JS函数,跳过Polumer('your-element'…东西?是的,我只是尝试将JS函数放在过滤器表达式中,但没有效果。对Dart方法的引用会打印一些东西:{p | rt90_to_wgs84}}rt90_to_wgs84(p){print(p.toString());}但是无法让它调用JS。我试过查看JsFunction和JsObject,但无法理解。该函数只是JS文件中的一个普通全局函数。我不知道JsFunction.withThis()是什么是for,和JsObject.callMethod?我没有对象或方法,只有那个全局函数。对不起,我不做Dart,所以不能帮上忙…看起来我的答案没有帮助,我稍后会删除它。呃,现在在你的解决方案中,你提到了我的帖子,所以也许我应该保留它:)不管怎样,很高兴你能让它工作。
<template repeat="{{ p in start_points }}">
    <core-item>{{ p | rt90_to_wgs84 }}</core-item>
</template>
rt90_to_wgs84(p) {
  return context.callMethod('grid_to_geodetic', [p.x, p.y]);
}