如何使javascript代码在聚合自定义元素中工作
我使用的是聚合物起动器套件2.0 嵌套自定义元素的结构: (意味着如何使javascript代码在聚合自定义元素中工作,javascript,ajax,polymer,disqus,custom-element,Javascript,Ajax,Polymer,Disqus,Custom Element,我使用的是聚合物起动器套件2.0 嵌套自定义元素的结构: (意味着在index.html等中): |index.html --------\我的app.html(自定义元素) ----------------\my-testView1.html(自定义元素) ----------------\my-testView2.html(自定义元素) 我需要在my-testView1.html和my-testView2.html页面上放置disqs注释(每个页面有单独的线程) 我试着让它工作,chrome
在index.html等中):
|index.html--------\我的app.html(自定义元素)
----------------\my-testView1.html(自定义元素)
----------------\my-testView2.html(自定义元素) 我需要在my-testView1.html和my-testView2.html页面上放置disqs注释(每个页面有单独的线程) 我试着让它工作,chrome的控制台消息告诉我必须使用ajax方法(因为my-testView1.html和my-testView2.html都在
中,所以路由正在进行,我想这就是原因),它也给了我这个链接
my-testView1.html的结构
:(我将example.com和myChannelID改为实名) 这里早些时候曾有人问过我这个问题:
在那里的帮助和指导下,我成功地达到了这一点。但我仍然不能让它与ajax一起工作,这样它就可以将单独的disks线程加载到每个页面 也许这与
#有关
或者可能我必须将它插入ready:function(){}
中,但如果我这样做,它会破坏布局,因此我将它放在一个单独的标记中,现在它说discus未定义
。我不知道我错过了什么
我只有50个声誉奖励要分享,但如果你知道如何使它工作,请你解释我如何修复它。页面中的
元素必须是唯一的,因为它是Discus库安装下载线程的地方。因此,您应该将其添加到
标记之后
<div>
<iron-pages>
<view-1></view-1>
<view-2></view-2>
</iron-pages>
</div>
<div id="disqus_thread"></div>
另外,由于使用了
discus.reset()
,因此可以删除var discus\u config=…
要解决
元素的唯一性问题,请执行以下操作:
如果要将其插入到内部的右侧页面中,可以在调用discus.reset()
之前使用appendChild()
移动它。例如,将其放在
元素中
内部attributeChange()
方法:
在视图-1中
:
//页面内容
//页脚
另一种可能的解决方案是:
创建一个html文件,并将DISKS代码放入其中:
<div id="disqus_thread"></div>
<script>
var disqus_shortname = 'YourDisqusId';
var disqus_identifier = '/view1';
var disqus_url = 'https://example.com/view1/';
var disqus_config = function () {
};
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
var discus_shortname='yourDiscussid';
var discus_标识符='/view1';
var discus_url='1〕https://example.com/view1/';
var discus_config=函数(){
};
(功能(){
var dsq=document.createElement('script');dsq.type='text/javascript';dsq.async=true;
dsq.src='https://'+discus_shortname+'.discus.com/embed.js';
(document.getElementsByTagName('head')[0]| | document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
然后向链接该代码的自定义元素页面添加iframe
<iframe src="../src/page1_disqus.html" style="width:100%; min-height:400px; border:0 none;"></iframe>
如果它只是在这个iframe中向您显示您的应用程序,那么最好不要将这个html文件放在您的src目录中,而是放在一个单独的服务器上,并使用共享链接而不是本地存储。/src/
如果您需要在多个页面上放置discus,只需创建另一个html文件,然后以相同的方式将其链接到需要使用iframe的页面谢谢。好的,但是如果要在放置
的位置插入一个线程,那么如果我将它放在
下的我的app.html
上,它就不会出现在页面上。现在这个div通过
到达了它需要的位置,那么如果我把它放在铁皮书页下面,它会出现在什么地方呢?我用一个解决方案更新了ma答案,它没有利用感谢你的帮助,伙计,声誉赏金是你的
Polymer( {
is: 'view-1',
attributeChanged: function ( name, old, value )
{
if ( name == 'class' && this.classList.contains( 'iron-selected' ) )
{
//call DISQUS.reset() here
DISQUS.reset( {
reload: true,
config: function ()
{
this.page.identifier = "/testView1"
this.page.url = "https://www.example.com/testView1"
}
} )
}
}
} )
this.$.container.appendChild( document.getElementById( 'disqus_thread' ) )
<template>
//Page content
<div id=container></div>
//Page footer
</template>
<div id="disqus_thread"></div>
<script>
var disqus_shortname = 'YourDisqusId';
var disqus_identifier = '/view1';
var disqus_url = 'https://example.com/view1/';
var disqus_config = function () {
};
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<iframe src="../src/page1_disqus.html" style="width:100%; min-height:400px; border:0 none;"></iframe>