AngularJS中的Firebreath对象
Firebreath Object in AngularJS
我试图在AngularJS视图中包含一个FireBreath插件对象,但是当我试图渲染视图时,我得到这个错误:
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>
所以我认为,无论我使用$compile
后得到的document.getElementById
是不一样的。
如果我能在view.html文件中包含<object>
标签,并让它显示在<body class='ng-view'>
中,但我得到了顶部的TypeError,所以如果有人对此有任何想法,那将是首选。
任何帮助都是感激的。谢谢。
如果有人感兴趣,因为我无法让事件触发,我跟着这个链接:
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
之后附加一个事件到插件对象。
我遇到了同样的问题,并能够通过在我的插件对象中创建一个只读的nodeName
属性来解决问题。我在firebreath论坛的帖子中询问了这个问题,taxilian建议将其添加到JSAPIAuto.cpp中,这也有效,所以我提交了一个带更改的pull请求。
我曾经花了大约6个小时试图使FireBreath插件与jquery工作;它确实很有教育意义,但最终我决定不值得为它付出努力。
长话短说,这是不值得的;特别是因为即使你能使它工作,它会打破IE9,其中FireBreath不支持addEventListener (IE从来没有给它偶数信息,所以它有点难以支持),你将需要使用attachEvent。- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- Firebreath 能否检测到插件对象的'width'并'height'更改?
- AngularJS中的Firebreath对象