2

我有这个 jQuery 代码

if (Meteor.isClient){

jQuery(document).ready(function(){

    jQuery('#content .row > div').mouseenter( function(){
        jQuery('#content .row div .edit').toggle();
    });

    jQuery('#content .row > div').mouseleave( function(){
        jQuery('#content .row div .edit').toggle();
    });
});

}

当我运行我的应用程序时,这不起作用。如果我将它放入 chrome 控制台,它会完美运行。有什么问题?

这也发生在不同的代码之前。

4

2 回答 2

4

您的代码向执行代码时存在的 DOM 元素添加回调。但是,Meteor 稍后会在渲染模板时向页面添加内容。这是应该如何完成的:

选项 1) 使用 Meteor 事件

Template.asdf.events({
    'click .classname': function(e) {
        ...
    }
});

选项 2)在极少数情况下,您需要的东西在以前的方式中不起作用,将 JQuery 的东西放在rendered回调中:

Template.asdf.rendered = function(){
    _.each(this.findAll('.classname'), function(element){
         $(element).on('mouseenter', function(){...});
    });
};

选项 3)在极少数情况下,当您需要对所有页面进行一些特殊处理时,使用 JQuery 实时绑定

Meteor.startup(function(){
    $('#content .row > div').on('click', function(){...});
});
于 2013-07-15T08:45:03.503 回答
1

您可以使用流星事件。

例如使用 Meteor.startup(function () { 而不是 jQuery(document).ready(function(){

您必须检查http://docs.meteor.com/#eventmaps

可能很容易:)

于 2013-07-15T07:29:54.580 回答