尝试关联两个集合获取输入值

时间:2014-12-18 06:43:14

标签: javascript mongodb meteor

我正在尝试使用mongodb关注流星上的两个集合,我的解决方案是在输入上打印一个值,然后获得该值,并在另一个集合上进行特定查找并且热情地神奇地相关,我知道那种基本但是我能做到的所有我猜对了吗?所以我的问题是,当我试图让这个输入值始终是相同的时候,好像在帮助器idk上有一个问题,这是de code我在哪里'我试图获得de输入值,是在渲染模板上

el.addEventListener( 'click', function( ev ) {
                classie.add( modal, 'md-show' );
                overlay.removeEventListener( 'click', removeModalHandler );
                overlay.addEventListener( 'click', removeModalHandler );
          Tracker.autorun(function(){
            valueInputCliente  = $("#inputCliente").val();
            Session.set("valorInput",valueInputCliente)
            console.log("el valor del input es " + valueInputCliente);
          });
                if( classie.has( el, 'md-setperspective' ) ) {
                    setTimeout( function() {
                        classie.add( document.documentElement, 'md-perspective' );
                    }, 25 );
                }
            });

close.addEventListener( 'click', function( ev ) {
       Tracker.autorun(function(){
         var valorInput = Session.get("valorInput")
         valorInput  = $("#inputCliente").empty();
          console.log("el valor del input ahora es " + valorInput)
       });
                ev.stopPropagation();
                removeModalHandler();
            });

所以在这个函数中当有人打开元素时应该得到输入,然后当关闭元素时值为empy,但只是使用mongo的第一个值,所以我希望已经清楚了,你可以帮助我对不起我的英语,我尽我所能。

1 个答案:

答案 0 :(得分:0)

嗯,我不确定,我理解了一切并解决了你的问题。但我仍然有一些评论,也许还有一个解决方案。

首先,如果你正在使用meteor,为什么不使用流星的思维方式,我的意思是你用JavaScript在两个元素上放置一些点击事件,但在meteor中你可以用这样的模板绑定它们:

Template.mytemplate.events({
    'click el':function(e){
        //do stuff
    },
    'click close':function(e){
        //do stuff
    }
});

但问题不在这里。 其次,您在第一个事件处理程序中使用Tracker.autorun(...)。因此,当依赖项发生变化时,您希望重新运行该函数。但我无法在Tracker.aurtorun函数中看到一个被动数据源。 如果我理解正确的文档:

  

Tracker.autorun允许您运行依赖于被动数据源的函数,以便以后如果数据发生更改,该函数将重新运行。

您需要一个反应式数据源来重新运行您的功能,

valueInputCliente  = $("#inputCliente").val();

不是,我找不到使其成为反应数据源的代码。 (但有可能) 并且Session.set也不是(但Session.get是!)。 session docs

所以也许这是你的问题,这个功能不会重新运行。所以你是第二个事件处理程序,这是好的,因为它取决于一个被动数据源:

var valorInput = Session.get("valorInput")

不会重新运行,因为valorInput不会更改多次(第一次)。

因此,您需要在第一个处理程序中放置一个反应数据源,以便在需要时触发您的功能。我不确定我是否回答了你的问题,但希望它有所帮助!