0

我正在尝试在链接更改时响应地运行第 3 方 jQuery 库http://embed.ly 。我正在使用新的 Tracker.autorun 告诉它在 Session 变量“droppedLink”更改时在 Template .rendered 函数中重新运行 jquery。(我也使用了数据库反应变量,但同样的问题)。

我试图遵循最佳方式来防止模板助手在不必要时重新运行?

我不确定是否需要尝试这种方法?Meteor 0.8 Blaze 如何更新 Jquery 插件的渲染更改它似乎更复杂,因为清洗更简单的自动运行就足够了。

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

当 U 替换链接时(参见 # 2 和 3),变量会响应更新,自动运行函数运行,但 Embedly 渲染链接上的结果不正确。它似乎在页面上插入了多个嵌套链接(见下面的截图)

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)这是初始结果,链接正确呈现(第一次通过):

在此处输入图像描述

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

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

在此处输入图像描述

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

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

在此处输入图像描述

这是#3 渲染的 HTML:(看不到 embedley 是如何不断嵌套新链接的)。如果我刷新页面一切正常(如上面的#1)。

在此处输入图像描述

console.log 的示例:没有 JS 错误,只调试我的东西。抱歉不是很漂亮,但我可以看到自动运行的东西正在工作,并且 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>代码替换它之后。因此,下一次它是嵌入提取第二次转换的 Embedly 链接。

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

所以我认为为了弥补这一点,我需要<a class="something">在调用 Embedly 之前删除 Embed 并重新插入 ,就像它是初始通道一样。请问您对如何执行此操作有任何提示吗?即我需要删除 Embedley<div class="embed">并插入<a href=somelink></a>

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

附言。我不知道以这种方式操作 DOM 是不是一件坏事????

4

0 回答 0