2

FireBreath プラグイン オブジェクトを AngularJS ビューに含めようとしましたが、ビューをレンダリングしようとすると、次のエラーが発生します。

TypeError: Cannot read property 'nodeName' of undefined

次のようにして、オブジェクトをビューに正常に含めることができます$compile

$("body").append($compile('<object id="plugin" type="application/x-firebreathplugin" width="0" height="0></object>')($scope));

ただし、このようなオブジェクトを含めた後、プラグインに JS でイベントを発生させることができません。

このようなことをする:

plugin = document.getElementById('plugin');
console.log(plugin);

戻り値

TypeError

Chrome コンソールで。しかし、私はまだできる:

plugin.callFunction();

そして、FireBreath メソッドを実行します。問題は、JS でイベントを発生させようとするときです。何を試しても、イベントを発生させることができません。したがって、このコードは決して実行されません:

var addEvent = function(obj, name, func) {
    obj.addEventListener(name, func, false);
}

addEvent(document.getElementById('plugin'), 'firebreathEvent', function(data) {
    console.log('data ' + data);
});

var plugin = document.getElementById('plugin');
plugin.functionThatTriggersFireBreathEvent();

を呼び出した後にオブジェクトにアクセスすることに関係があるかどうかは誰にもわかりませ$compileんか? 通常の HTML (AngularJS を使用する前) でプラグインをコンソールに記録すると、次のように返されることに気付きました。

<JSAPI-Auto Javascript Object> 

document.getElementByIdだから、使った後に得られるものは何でも同じではないと思ってい$compileます。

もっと簡単なのは、<object>タグを view.html ファイルに含めて表示する<body class='ng-view'>ことですが、トップの TypeError が発生するので、誰かがそのアイデアを持っている場合は、それが優先されます。

どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

1

誰かが興味を持っているなら、私はイベントを発火させることができなかったので、私はこのリンクに沿って進みました:

http://colonelpanic.net/2010/12/firebreath-tips-asynchronous-javascript-calls/

(これはあなたのブログ@taxilianだと思います)データをJSに戻します。

プラグインコード:リンクのすばらしい例。

JSコード:

//attach FireBreath Object to AngularJS View
$("body").append($compile('<object id="plugin" type="application/x-firebreathplugin" width="1" height="1"><param name="onload" value="pluginLoaded"/></object>')($scope));

var callback = function(data) {
    //data is an object
    console.log(data.resultFromFireBreath);
}

plugin = document.getElementById("plugin");
plugin.getData(callback);

これは、誰かが後にプラグインオブジェクトにイベントをアタッチする方法を理解できるまで、今のところ機能する必要があります$compile

于 2013-03-13T00:18:37.883 に答える
0

FireBreath プラグインを jquery で動作させるのに約 6 時間費やしたことがあります。それは本当に教育的でしたが、最終的に私はそれが仕事の価値がないと判断しました.

簡単に言えば、それだけの価値はないということです。特に、たとえそれを機能させることができたとしても、FireBreath が addEventListener をサポートしていない IE9 では機能しなくなり (IE は偶数の情報を提供しないため、サポートが少し難しい)、とにかく attachEvent を使用する必要があります。

于 2013-03-12T19:55:24.627 に答える