使用Meteor 0.9.4 Tracker.autorun发布运行重新激活的Embedly / jQuery

时间:2014-10-20 04:04:56

标签: meteor meteor-blaze embedly

当链接发生变化时,我试图反应性地运行第三方jQuery库http://embed.ly。当Session变量'droppedLink'发生变化时,我正在使用新的Tracker.autorun告诉它在Template .rendered函数中重新运行jquery。 (我也使用了数据库反应变量,但同样的问题)。

我试图关注Best way to prevent a template helper to be rerun when it is unnecessary?

我不确定我是否需要尝试这种方法? Meteor 0.8 Blaze how to update rendered changes for Jquery plugins似乎更复杂,因为更简单的自动运行就足够了。

在初始渲染中,一切正常(参见下面的#1)

当U替换链接时(参见#2& 3),变量被动反应,自动运行功能运行,但Embedly rendred链接上的结果不正确。它似乎在页面上插入了多个嵌套链接(参见下面的屏幕截图)

1)这是.rendered函数

Template.resourceItem.rendered = function() {
    var self = this;

    Tracker.autorun(function () {


        var updatedLink = Session.get('droppedLink');
        console.log("updated url:" + updatedLink + " for " + self.data._id);


        var closestDivWidth =  self.$('.embedlylink a').closest('div').width(); 


        self.$('.embedlylink a').embedly({
            key: '7c2cb80d45fb4a17babe2cf3bbf29d3e',
            query: {maxwidth: closestDivWidth}
        });

    });

}

2)这是初始结果,链接正确呈现(第一遍):

enter image description here

2)当我用链接#2替换时,我得到:

请注意,渲染的链接是正确的,但实际嵌入的文本和图像不正确。

enter image description here

3)当我用第3个链接替换时,这里是图像和呈现的HTML:

请注意,渲染的链接是正确的,但实际嵌入的文本和图像不正确。

enter image description here

这是#3呈现的HTML :(不知道embedley如何保持嵌套新链接)。如果我刷新页面一切正常(如上面的#1)。

enter image description here

console.log示例:没有JS错误,只调试我的东西。抱歉不是很漂亮,但我可以看到自动运行的东西正在运行,并且正确地在DB中更新了URL,只是嵌入似乎没有正确呈现它:

```

this id in subs:e97cc28966ca211852c070fc router.js:111
title:0 router.js:113
this id in subs:e97cc28966ca211852c070fc router.js:111
title:1 router.js:113
this id in subs:e97cc28966ca211852c070fc router.js:111
title:1 router.js:113
Can Edit, editors: userID:2iNQmTMs9AkLzQxgCin Editors array:false permissions.js:11
can edit:true permissions.js:13
activeModal:false modal.js:6
updated url:undefined for 00e3ce4f9255b8c3a2453e49 resource_item.js:323
updated url:undefined for e97cc28966ca211852c070fc resource_item.js:323
about to update: 00e3ce4f9255b8c3a2453e49 field:resourceURIvalue:http://www.smh.com.au/nsw/man-who-made-corruption-claims-against-councillor-hit-with-80000-damages-bill-20141020-118kid.html globals.js?022c5f844233f60827f7b12e193ea12506c0cf10:18
about to update: e97cc28966ca211852c070fc field:updatedvalue:1413802243911 globals.js?022c5f844233f60827f7b12e193ea12506c0cf10:18
this id in subs:e97cc28966ca211852c070fc router.js?42427feeaf93d51058b2ffbcf1e269df5b9917cc:111
title:1 router.js?42427feeaf93d51058b2ffbcf1e269df5b9917cc:113
updated url:http://www.smh.com.au/nsw/man-who-made-corruption-claims-against-councillor-hit-with-80000-damages-bill-20141020-118kid.html for 00e3ce4f9255b8c3a2453e49 resource_item.js?66299ce9ff3edc4ea4e1ebc1ba549cc0eec7a2cd:323
updated url:http://www.smh.com.au/nsw/man-who-made-corruption-claims-against-councillor-hit-with-80000-damages-bill-20141020-118kid.html for e97cc28966ca211852c070fc resource_item.js?66299ce9ff3edc4ea4e1ebc1ba549cc0eec7a2cd:323
Can Edit, editors: userID:2iNQmTMs9AkLzQxgCin Editors array:false permissions.js?bc95cfb655413c86e2325bd3f24145b2d6be9e94:11
can edit:true permissions.js?bc95cfb655413c86e2325bd3f24145b2d6be9e94:13
activeModal:false

```

更新&可能的解决方法:

好吧,我想我已经解决了正在发生的事情,我认为这是因为Embedly和Meteor都在操纵DOM。

重复发生,就像我第二次更新URL一样,这是在EMbedly删除了之后     <a class"something">并将其替换为<embed>代码。因此,下次嵌入提取嵌入式链接时,第二次进行转换。

这是因为Meteor在没有页面刷新的情况下工作,似乎并不期望Embedly也改变了DOM。

所以我认为为了弥补这一点,我需要在调用Embedly之前删除嵌入并重新插入<a class="something">,就像它是初始传递一样。你有任何关于如何做到这一点的提示吗?即我需要删除Embedley的<div class="embed">并插入<a href=somelink></a>

这应该允许Embedly按照初始传递方式工作。

PS。我不知道以这种方式操纵DOM是一件坏事????

0 个答案:

没有答案