0

だから私は、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」だけで、投稿テンプレートで使用できる実際の ID ではありません。したがって、その「識別子」の値にアクセスする方法が必要です。

4

1 に答える 1

2

(1){{view}}ヘルパーでid = "disqus_thread"を使用して、IDを設定できます。ビューの要素を直接変更しないでください。

(2)identifierBinding = "id"を使用して、ビューヘルパーが指定されたパスをたどることを認識できるようにします。そうでない場合、値として扱われます。

于 2013-03-04T19:20:21.287 に答える