我在我的rails 5應用程序中包含了fabric.js(dist文件夾) - vendor/assets/javascripts
。導致fabric.js錯誤
我在查看文件帆布的HTML元素 - view.html.erb
<div class="col-sm-6">
<canvas id="canvas" width="300" height="200" style="border:1px solid #000000">
</canvas>
</div>
然後我訪問assets/javascripts/event.js
JavaScript文件中上述畫布。
var canvas = new fabric.Canvas('can');
var circle = new fabric.Circle({
radius: 20, fill: 'green', left: 100, top: 100
});
canvas.add(circle);
```
我得到以下錯誤,當我瀏覽網頁,
fabric.self-85644f2….js?body=1:6519 Uncaught TypeError: Cannot create property 'style' on string 'can' at klass._createCanvasElement (fabric.self-85644f2….js?body=1:6519) at klass._createLowerCanvas (fabric.self-85644f2….js?body=1:6559) at klass._initStatic (fabric.self-85644f2….js?body=1:6249) at klass.initialize (fabric.self-85644f2….js?body=1:8496) at new klass (fabric.self-85644f2….js?body=1:1944) at event.self-e4cb5e2….js?body=1:3
這裏是我的application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require fabric
//= require_tree .
更新
所以,當canvas代碼被包裝在一個DOM準備好的回調中時,我現在看到畫布已經呈現。但是,我仍然不知道什麼是初始化結構的正確方式,即等待DOM加載並運行結構相關代碼的正確方法。
顯然,這是等待DOM準備好的方式 - http://guides.rubyonrails.org/working_with_javascript_in_rails.html#turbolinks。但是,在我訪問畫布的所有JavaScript文件中是否添加此包裝代碼?
$(document).on('turbolinks:load', function() {
var canvas = new fabric.Canvas('can');
var circle = new fabric.Circle({
radius: 20, fill: 'green', left: 50, top: 50
});
canvas.add(circle);
});
我刪除了內聯樣式分配,沒有幫助。織物與沒有'#'的元素ID無關 - http://fabricjs.com/fabric-intro-part-1#canvas。感謝你的努力。我的猜測是它包含的javascript文件的順序或dom在JavaScript代碼執行時沒有準備好。 – plspl
'$(document).ready(function(){ var canvas = new fabric.Canvas('can'); var circle = new fabric.Circle({radius:20,fill:'green',left: 100,top:100 }); canvas.add(circle); });' 我認爲這應該起作用。懷疑是 –
,這與dom init有關。當我添加包裝在dom準備回調內的代碼時,畫布確實被渲染。但是,我不知道什麼是現在初始化結構的正確方法。我已經對你的評論投了贊成票。 – plspl