0

セレクターがサブテンプレートにあるテンプレートで this.findAll を使用しようとすると、findAll は何も返しません。

HTMLは次のとおりです。

<template name="products">
    {{#each productList}}
        {{> product }}
    {{/each}}
</template>
<template name="product">
    <div class="box">{{name}}</div>
</template>

JS は次のとおりです。

Template.products.helpers({
    productList: function() {
        var all = Products.find({}).fetch();
        return all;
    }
});
Template.products.rendered = function(){
    var boxes = this.findAll('.box');
    console.log(boxes.length);
}

box.length の出力は 0 です。「ボックス」要素を取得する方法はありますか?

4

3 に答える 3

0

これが正しい答えです。これを Iron-router ルートに追加しました。

action : function () {
    if (this.ready()) {
        this.render();
    }
}

別の問題を解決しようとしているときに、 https://stackoverflow.com/a/23576039/130237から回答が見つかりました。

于 2014-06-06T03:56:03.767 に答える
0

すべての製品がロードされた後にスクリプトを実行するために行ったことは次のとおりです。

すべての製品に last_product プロパティを追加しました。

Template.products.helpers({
    productList: function() {
        var all = Products.find({}).fetch();
        var total = all.length;
        var ctr = 0;
        all.forEach(function(doc){
            doc.last_product = false;

            ctr++;
            if(ctr == total)
            {
                doc.last_product = true;
            }
            return doc;
        });
        return all;
    }
});

次に、「Template.products」の代わりに「Template.product」を使用して、最後の製品がレンダリングされたかどうかを検出しました。最後の製品がレンダリングされたら、スクリプトを実行します。

Template.product.rendered = function(){
    if(this.data.last_product){
        var boxes = $('.pbox');
        console.log(boxes.length);
    }
}

box.length が正しい長さになりました。

アイデアをくれたデビッドに感謝します!

于 2014-06-05T06:12:12.510 に答える