2015-02-09 21 views
0

如何將畫布腳本分隔成助手?目前它只有在它直接寫入模板本身時纔有效。我想這是微不足道的 - 但我找不到如何去做。謝謝! (scaledSprite是一個輔助以及)如何在模板中組織畫布腳本

<template name="spriteBox"> 
    <script> 
     var myImage = new Image(); 
     myImage.src="{{ spirte.url store='OriginalPix' }}"; 

     myImage.onload = function() { 
      var c = document.getElementById("myCanvas"); 
      var ctx = c.getContext("2d"); 
      ctx.fillStyle = "{{ sprite.metadata.backColor }}"; 
      ctx.fillRect(0, 0, {{ scaledSprite.widthDevice }}, {{ scaledSprite.heightDevice }}); 
      ctx.imageSmoothingEnabled = false; 
      ctx.drawImage(myImage, 0, 0, {{ scaledSprite.widthDevice }}, {{ scaledSprite.heightDevice }}); 
     } 
    </script> 
    <canvas id="myCanvas" width="{{ scaledSprite.widthDevice }}" height="{{ scaledSprite.heightDevice }}" style="width:{{ scaledSprite.width }}px; height: {{ scaledSprite.height }}px;"> 
     This browser does not support HTML5 canvas 
    </canvas> 
</template> 

這是行不通的: 試圖分開腳本,並將其移動到spriteBox.js:

Template.spriteBox.rendered = function() { 
    var myImage = new Image(); 
    myImage.src= this.sprite.url; 
     // > Exception from Tracker afterFlush function: Cannot read property 'url' of undefined 
     // > TypeError: Cannot read property 'url' of undefined 

    myImage.onload = function() { 
     var c = document.getElementById("myCanvas"); 
     var ctx = c.getContext("2d"); 
     ctx.fillStyle = this.sprite.metadata.backColor; 
     ctx.fillRect(0, 0, scaledSprite.widthDevice, scaledSprite.heightDevice); 
     ctx.imageSmoothingEnabled = false; 
     ctx.drawImage(myImage, 0, 0, scaledSprite.widthDevice, scaledSprite.heightDevice); 
    } 
}; 

HTML

<template name="spriteBox"> 
    <canvas id="myCanvas" width="{{ scaledSprite.widthDevice }}" height="{{ scaledSprite.heightDevice }}" style="width:{{ scaledSprite.width }}px; height: {{ scaledSprite.height }}px;"> 
     This browser does not support HTML5 canvas 
    </canvas> 
</template> 

鐵路由器

Router.route('/spriteBox/:_id/:boxsize', { 
    name: 'spriteBox', 
    template: 'spriteBox', 
    waitOn: function() { 
     return [ 
      subs.subscribe('aPix', this.params._id) 
     ]; 
    }, 
    data: function() { 
     var spriteDocument = MyPix.findOne({_id: this.params._id}); 
     templateData = { 
      sprite: spriteDocument, 
     } 
     return templateData; 
    } 
}); 
+0

當您使用渲染代碼,會發生什麼? – tarmes 2015-02-09 14:52:56

回答

1

一個明顯的一點毛病渲染的功能是,你不能使用{{...}} javascript代碼裏面。這只是模板。您需要直接調用實際功能。

+0

Aww ...謝謝@tarmes - 當然就是這樣! – Kai 2015-02-10 03:42:36

+0

實際上它奇怪地工作了幾分鐘 - 現在不行了。即使模板{{}}已被刪除。當前代碼已更新。 :/ – Kai 2015-02-10 05:18:32

0

基於新的代碼,你有一個新的bug:

myImage.src= this.sprite.url; 

應該

myImage.src= this.data.sprite.url; 
+0

謝謝@tarmes你是對的 - 我不得不通過'myImage.src = this.data.sprite.url();'添加括號,並且它現在返回路徑。但我仍然遇到這些'this.data.sprite.metadata.backColor'(嘗試從文件對象中獲取元數據)以及在幫助器中定義的函數scaledSprite',我試圖在onload函數:'scaledSprite.widthDevice'。語法似乎是錯誤的。兩者都是未定義的。 – Kai 2015-02-10 08:44:27

+0

我放棄:( - 畫布一直在

  • 11. 在html5 webgl畫布動畫中組織對象three.js
  • 12. 在Swift中組織動畫
  • 13. 如何組織模塊的子文件夾,也稱爲腳本?
  • 14. greasemonkey畫布腳本
  • 15. 在Django模板中渲染畫布
  • 16. Android:如何組織布局
  • 17. 如何組織kivy佈局?
  • 18. 文件組織PowerShell腳本
  • 19. 組織模式拍攝的模板
  • 20. 組織類似模板的代碼,而在C++模板
  • 21. 在動作腳本組織類3
  • 22. 如何安裝Emacs組織模式LaTeX導出模板?
  • 23. 如何組織組織信息在組織模式,使它作爲輸出表?
  • 24. 如何組織Perl模塊
  • 25. 在組織模式下,如何摺疊/隱藏腳註?
  • 26. 如何獲得劍道組織頁腳模板名稱的自定義名稱?
  • 27. 如何在Google Apps腳本模板中創建文本字段?
  • 28. 在組織模式模板中使用%\ n時出錯
  • 29. 在組織模式模板中包含直接HTML代碼
  • 30. 在組織模式捕獲模板中使用屬性