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
小智 10
以下对我有用:
if (Meteor.is_client) {
Template.templateNameThatContainsMyDiv.rendered = function(){
$('#myDiv').append("foo");
console.log('bar');
};
}
Run Code Online (Sandbox Code Playgroud)
$(document).ready
当初始静态DOM完成加载时,如果你使用任何JS模板库,那么初始静态DOM在运行时很可能是空的$(document).ready
.因此,当模板完成渲染时,您必须使用回调订阅以启动代码.如果那是不可能的,你将不得不使用.on
或.bind
监听你正在寻找的DOM节点的插入...