2

次の問題があります。ユーザーがいくつかの入力に基づいてフィルターで除外できるインターフェイスがあります。5つの入力があります。入力が入力されたら、その値をコレクションを返すヘルパーに追加したいと思います。私が解決できない問題は、これを動的に行う方法です。ユーザーは 1 つの入力、時には 3 つ、時には 5 つすべてを入力する場合があります。find() メソッド内では、meteor の構文のみを書き留めることができます。

mongoSelector: fieldName,

これは、find() 内でのみハードコードできることを意味します。ただし、5 つのセレクターをすべて追加するだけでは機能しません。値の 1 つが空の場合、find は何も検索せずに空の文字列を検索するためです。

条件または変数を実行することを考えましたが、必要な構文のため、両方とも find 内で機能しません。これを解決するにはどうすればよいですか?

var visitorName;
var visitorAge;
Session.set('visitorName', visitorName);
Session.set('visitorAge', visitorAgee);


Template.web.helpers({
    visitors: function() {
        return Visitors.find({ visitor_name: Session.get('visitorName'), visitor_age: Session.get('visitorAge') });
    }
});


Template.web.events({
  "change #visitor_name": function (event, template) {
    visitorName = $(event.currentTarget).val();
  }
});



Template.web.events({
  "click #reset_filter": function (event, template) {
    return Visitors.find();
    $(input).val('');    
  }
});
4

1 に答える 1

1

http://jsfiddle.net/m5qxoh3b/

これは動作します

Template.web.helpers({
    visitors: function() {
        var query = {};

        var visitorName = (Session.get('visitorName') || "").trim();
        if (visitorName) {
            query["visitor_name"] = visitorName;
        }
        //same thing for other fields

        return Visitors.find(query);            
    }
});



Template.web.events({
  "change #visitor_name": function (event, template) {
      var visitorName = $(event.currentTarget).val();
      Session.set('visitorName', visitorName);
  }
});
于 2014-12-25T21:53:56.140 に答える