Dart 在聚合物网格布局中自动调整画布大小

Dart 在聚合物网格布局中自动调整画布大小,dart,dart-polymer,polymer,Dart,Dart Polymer,Polymer,我有一个组件,它使用polymer grid layout进行布局,其中包含一个画布作为内容的主要部分。我希望画布根据polymer grid layout分配的大小自动调整大小 我不能把宽度:100%;高度:画布上的100%,因为这只会拉伸画布,使其扭曲且呈颗粒状。相反,我在画布上缠绕了一个div,并根据代码中的div大小手动调整画布的大小 代码看起来有点像(注意,我省略了锅炉板,如etc) 画布视图包含 在画布视图省道代码中,我设置画布宽度如下 void\u resize(){ ca

我有一个组件,它使用
polymer grid layout
进行布局,其中包含一个画布作为内容的主要部分。我希望画布根据
polymer grid layout
分配的大小自动调整大小

我不能把
宽度:100%;高度:画布上的100%
,因为这只会拉伸画布,使其扭曲且呈颗粒状。相反,我在画布上缠绕了一个div,并根据代码中的div大小手动调整画布的大小

代码看起来有点像(注意,我省略了锅炉板,如etc)


画布视图包含


在画布视图省道代码中,我设置画布宽度如下

void\u resize(){
canvas.width=canvasContainer.clientWidth;
canvas.height=canvasContainer.clientHeight;
_重画();
}
我从哪里打来的

@覆盖
void ready(){
画布=$['canvas'];
canvasContainer=$['canvasContainer'];
//除了窗口外,似乎没有任何调整大小的功能!?!
listen((\u)=>\ uresize());
}
来自

@已发布的无效集canvasModel(canvasModel m){
_canvasModel=m;
//TODO:需要延迟构建,否则包含的div尚未正确调整大小
新计时器(新持续时间(毫秒:50),_调整大小);
}
问题出在上面的代码中。如果我在这里直接调用_resize,那么container div还不知道它的正确高度。经过实验,我发现50毫秒可以让容器根据我机器上的网格布局正确调整大小,但这看起来很不可靠,在不同的设备上可能会出现问题

我怎样才能避免延误?是否有一些事件可以告诉我网格布局何时完成组件大小调整

还有没有一种更简单的方法来实现画布的缩放

最后,我必须设计canvasContainer面板的样式,使其具有0页边距、边框等。是否有方法获取该容器的内部尺寸

是否有一些事件可以告诉我网格布局何时完成组件大小调整

网格布局在完成组件大小调整后发送
聚合物网格布局
事件

还有没有一种更简单的方法来实现画布的缩放

我不这么认为,但也许一位油画专家会提出更好的建议

最后,我必须设计canvasContainer面板的样式,使其具有0页边距、边框等。是否有方法获取该容器的内部尺寸


clientWidth/Height
忽略边距和边框,但不计算填充。还有其他测量盒子的方法,但很快就会变得复杂(主要是因为x浏览器的问题)。这可能是一个困难的话题,这里有一个起始链接:

我添加了聚合物标签,使元素的原始设计师更可能也看到了这个问题。谢谢@GünterZöchbauerier,如果它没有像@ScottMiles解释的那样起作用,在polymer_ui_elements中创建一个问题,我会查看组件是否是最新的。感谢@GünterZöchbauerthanks@ScottMiles的帮助。我会试着用它来解决这个问题。具有画布的组件是可以在任何布局中使用的低级组件。栅格布局包含在更高级别的组件中。所以我必须先听这个事件,然后调用一系列layoutChanged方法来访问canvas组件。不理想。如果Polymerement有一个layoutChanged或类似的方法,您可以覆盖所有不同的布局,这会很好。这将更加简单和模块化。想法?我同意,我们确实计划添加一些
布局更改
或类似的级联来处理这些情况。同时,请注意,当您有一个恼人的“方法链/绑定链/etc”时,通常会有一种解决方法。例如,您可以使用
polymer signals
元素将信号发送到DOM()中任何位置的侦听器。这看起来比我刚才做的简单多了。非常感谢你的帮助