3

Meteor アプリで「メッセージ」のコレクションを表示しています。私のテンプレート「メッセージ」がレンダリングされるとき、「gridalicious」と呼ばれるこの jQuery プラグインを適用します。これは基本的に、メッセージを pinterest のような形式で表示します。

すべて正常に動作しますが、新しいメッセージを挿入すると、その新しいメッセージが 2 回表示されます。ブラウザを更新すると、重複はなくなりました。

次のようにプラグインを適用しています

Template.messages.rendered = ->
  $("#message_box").gridalicious
    width:250
    animate:false
    selector:".message"
    gutter:0

基本的に、このプラグインを削除すると、メッセージが重複することなく正しく表示されます。

何がこの問題を引き起こしているのかわかりません。

4

3 に答える 3

1

はい、私はこのような同様の問題を抱えています。このプラグインまたは同じ飽和状態の場合、テンプレート インスタンスが重複するのを避けるために、メッセージ ボックスのステータスを処理するグローバル変数を作成し、この新しいメッセージの ID がすでにグローバル ステータス ハンドラ内にあり、すでにレンダリングされているかどうかを判断する条件を追加します。 、次にそれを 2 回レンダリングしないでください。

グローバル スコープ

isAlreadyBeenReneredId = null

メッセージのテンプレート インスタンス

Template.messages.rendered = ->
    if isAlreadyBeenReneredId isnt @data._id
        isAlreadyBeenReneredId = @data._id
        options =
            width: 250
            gutter: 0
        $("#message_box").gridalicious options

実際のコードではありませんが、試してみたいアイデアがあります。

于 2012-11-12T14:00:43.273 に答える
0

私の知る限り、Meteor はすべてを何度もレンダリングするのではなく、違いだけをレンダリングします。問題は、同じ要素で jQuery プラグインを複数回呼び出すことだと思います。

プラグインはわかりませんが、append方法はあるようですが、これが役に立つのではないでしょうか?

于 2012-11-13T13:21:40.707 に答える
0

これを試して:

if (Meteor.isClient) {
  Meteor.startup(function () {
    $(document).ready(function (){
     $("#message_box").gridalicious({
        width:250,
        animate:false,
        selector:".message",
        gutter:0
     });
    });
  });
}

申し訳ありませんが、coffescript で同等のものを記述する方法がわかりませんでした。

于 2013-02-08T19:01:45.760 に答える