所以我正在为disqus评论小部件构建一个视图。因为(通常)你会把disqus放在静态页面上(不像使用Ember呈现的页面那样动态)我必须将一些额外的参数传递给Disqus API来刷新页面。为此,我需要将标识符传递给API。所以现在,我有一个像/ posts /:id这样的路由结构。所以我想将该ID传递给Disqus视图,但我不确定 - 或者我是否正确理解了Ember架构。如果有人能指出我正确的方向,那将是非常棒的。
以下是我在我的帖子模板中调用DisqusView的方法(这使用jade作为我的服务器模板语言)。
div(class="post limit-width")
h3 {{headline}}
p {{body}}
h6
em Posted by {{creator}} on {{created}}
{{ view App.DisqusView identifier=id }}
我的DisqusView看起来像这样。
App.DisqusView = Em.View.extend({
tagName: 'div',
//controller: App.MapController,
didInsertElement: function(){
this.get('element').id = 'disqus_thread';
console.log(this.get('identifier'));
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'sitename'; // required: replace example with your forum shortname
var identifier = new Date().getTime();
this.set('identifier', identifier);
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
}
});
这样可行;它实际上呈现了Disqus控件,但是当我在控制台上记录标识符时,我看到的只是“id”而不是post模板中可用的实际id。所以我只需要一种方法来访问“标识符”值。
答案 0 :(得分:2)
(1)您可以在{{view}}帮助器中使用id =“disqus_thread”来设置ID。请勿直接修改视图元素。
(2)使用identifierBinding =“id”,以便视图助手知道遵循指定的路径,否则它将被视为值。