2013-01-08 19 views
1

我正在顯示有關項目列表的信息,這些項目可以選擇包含縮略圖。如果不存在縮略圖,則顯示鏈接以允許上載圖像。DART在迭代模板中繪製畫布列表

我的問題是:在畫布上需要繪製什麼是最好的方法? (見下文)。我需要觸發代碼調用,然後還要識別每個畫布,以便獲取適當的圖像。

我知道它的調用都是通過在代碼中創建元素來完成的,但是我想盡可能使用webui模板機制。

 <template iterate="i in gItems.order"> 
     <template if="preItemDisplay(i) == true"> 
      <template if="gItemShowThumb == true">    
      <div template if="gItems.map[i].thumb == null"> 
       &nbsp; 
       <span class="clickable" on-click="uploadItemImageClick(i)"> 
       Add image... 
       </span> 
       </div> 

      <canvas template if="gItems.map[i].thumb != null" width="80px" height="60px"> 
       </canvas> <!-- ? How to draw on this canvas? --> 

      </template> 
      </template> 
     </template> 
+0

是一個自定義元素中的代碼? –

+0

你對賽斯的答案滿意嗎?如果是這樣,你不介意批准嗎? –

回答

1

HTML畫布是100%的代碼驅動。

你可以得到渲染上下文像這樣:

final CanvasElement canvas = query('canvas'); 
final CanvasRenderingContext2D cctx = canvas.context2d; 
// 
// drawing code here 
// 

有許多樣品都在網上討論如何繪製到畫布上。 Dart和Javascript中的畫布API之間幾乎沒有什麼區別,所以你應該有好運氣找到你需要的信息。

更新。如果你想訪問一個特定的畫布,你可以添加一個類或ID給它。

<canvas id='gameCanvas'></canvas> 
final CanvasElement canvas = query('#gameCanvas'); 
<canvas class='score_board'></canvas> 
final CanvasElement canvas = query('.score_board'); 
+0

感謝您的回答,但似乎我的問題的重點並不清楚(我會編輯一下)。我知道我需要使用代碼在畫布上繪製,重點是如何找到所有畫布,並觸發代碼以繪製它們。查詢('帆布')將無法正常工作 - 哪個畫布?你的代碼如何被調用? –

0

您可以添加一個ID到你的canvas元素,那麼你可以很容易地找到它的參考。

嘗試類似:

<canvas id="{{i.someIdentifierOnOrder}}" template ... 

然後你就可以找到該元素:

query('#the-id-of-the-element') 
+0

看來飛鏢不允許這樣做。請參閱「http://stackoverflow.com/questions/14038618/can-dart-bind-to-id-attribute」。這方面的解決方案是使用data- *屬性。其次,我不確定如何調用代碼 - 似乎需要的是一個僞事件,如