0

ここで提案されているように、いくつかの追加のデータ属性をレンダリングおよびカプセル化するために、アプリでいくつかのカスタムfabric.jsクラスを使用しています。

node.jsこれらによって JSON データが生成されたので、キャンバスをレンダリングし、ファブリックのnpmパッケージを使用してサーバー上の PNG イメージに書き込みたいと思います。fabric.Rectこれは、やなどの組み込みのファブリック クラスでうまく機能しますfabric.Textが、私のカスタマイズでは奇妙なエラーが発生し続けます。

基本的に、カスタム ファイルは次のようになります。

fabric.custom.js

// without this node raises "fabric is not defined" error
var fabric = fabric || {};

if (typeof exports !== 'undefined') {
  exports.fabric = fabric;
}

// actual implementations
fabric.NamedImage = fabric.util.createClass(fabric.Image, {

  type: 'named-image',

  // custom overrides
  // ...
});

そして、次のようにノードスクリプトにロードされます:

var fabric = require('fabric').fabric;
require('./fabric.custom');

// read JSON and write to PNG ..

実行すると、次の例外が発生します。

/Users/sa125/code/nodetest/fabric.custom.js:13
fabric.NamedImage = fabric.util.createClass(fabric.Image, {
                               ^
TypeError: Cannot call method 'createClass' of undefined
    at Object.<anonymous> (/Users/sa125/code/nodetest/fabric.custom.js:13:32)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/Users/sa125/code/nodetest/test.js:4:16)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)

クライアント側の fabric.js コードを node.js で再利用するために何か特別なことをする必要がありますか?

4

1 に答える 1

1

これは、node.jsにグローバルスコープがないためです。ブラウザで行われることは、元のファブリック変数がグローバル名前空間の下のDOMに割り当てられることです。これは、カスタムモジュールにファブリック変数がすでに存在することを意味します。

node.jsでは、各ファイルに独自のローカルスコープがあるため、その変数は存在しません。node.jsがfabricカスタムファイルで変数を検索するとき、まだ作成されていないため、変数を見つけることができません。あなたがする必要があるのはfabric、最初のrequireの後の元のオブジェクトを追加のメソッドで拡張するか、requireで新しい変数を作成し、2つのオブジェクトをマージすることです。いずれにせよrequire('...');、変数に割り当てられていないnode.jsでは役に立ちません。

于 2013-02-11T10:32:42.083 に答える