Meteor加载jQuery的方式有什么奇怪之处吗?

jon*_*rds 5 jquery backbone.js backbone-views meteor

当我使用Meteor时,我在使用标准jQuery功能方面遇到了一些困难.我的主要"客户端/服务器"JS文件如下所示:

if (Meteor.is_client) {
$(document).ready(function(){
$('#myDiv').append("foo");
console.log('bar');
});
}
Run Code Online (Sandbox Code Playgroud)

当我加载应用程序时,'bar'记录正常,但.append不起作用.如果我在页面加载后在控制台中调用相同的.append,它可以正常工作.(同样,如果我在非Meteor设置中运行相同的代码,它也可以正常工作.)

我实际想要运行的代码如下所示:

$(document).ready(function(){
var myModel = new MyModel({"name": "foo"});
var myModelView = new MyModelView({model: myModel});
});
var MyModel = Backbone.Model.extend({
initialize: function() {  
}
});
var MyModelView = Backbone.View.extend({
el: $('#myEl'),
initialize: function(){
_.bindAll(this, 'render');
this.render();
},
render: function(){
$(this.el).append(this.model.get('name'));
console.log(this.model.get('name'))
}
});
Run Code Online (Sandbox Code Playgroud)

此处不起作用的方法是在视图中渲染.render方法的console.log位没问题,但是jQuery追加不起作用.最初我想知道是否有关于我使用Backbone的方式是问题,但现在我想知道它是否是Meteor/jQuery问题?

mat*_*b33 13

也许尝试Meteor.startup在客户端使用:

if (Meteor.is_client) {
    Meteor.startup(function () {
        $(document).ready(function (){
            $('#myDiv').append("foo");
            console.log('bar');
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

根据我在Meteor文档中收集的内容,使用时$(document).ready()调用甚至可能是多余的Meteor.startup

  • `$(document).ready()`调用肯定是多余的. (3认同)

小智 10

以下对我有用:

if (Meteor.is_client) {
    Template.templateNameThatContainsMyDiv.rendered = function(){
        $('#myDiv').append("foo");
        console.log('bar');
    };
}
Run Code Online (Sandbox Code Playgroud)


Tam*_*man 5

$(document).ready当初始静态DOM完成加载时,如果你使用任何JS模板库,那么初始静态DOM在运行时很可能是空的$(document).ready.因此,当模板完成渲染时,您必须使用回调订阅以启动代码.如果那是不可能的,你将不得不使用.on.bind监听你正在寻找的DOM节点的插入...