jScrollPane不能使用meteor.js
问题描述:
我正在尝试使用jteorroll.js的jScrollPane,但它的行为并不像预期的那样。首先,如果我将'.scroll-pane'类赋予一个div,它将不会被我明确初始化。但是当我尝试明确初始化它时,它不起作用。这是一种流星魔法吗?或者我失去了一些明显的东西。第二,如果我不初始化它,但我尝试访问它...它的数据是空的,所以我不能使用它的API。我在下面列出了一些示例代码,请让我知道如果我做错了什么。jScrollPane不能使用meteor.js
HTML
...
<div class="rectangle">
<div class="chat scroll-pane" id="chatWindow">
{{#each Messages}}
{{#if Compare uId UID}}
<div class="bubble me">{{Text}}</div>
{{else}}
<div class="bubble you">{{Text}}</div>
{{/if}}
{{/each}}
</div>
<input class="textinput" type="text" placeholder="Insert Message" id="textToSubmit">
<button class="btn btn-success" id="submit" autofocus="autofocus">Send
<br>
<br>
</button>
</div>
JS
if (Meteor.isClient) {
...
var Message = new Meteor.Collection("Message");
Template.Message.rendered = function(){
if(!this._rendered) {
this._rendered = true;
var scroll = $(this.find("#chatWindow"));
var api = scroll.data('jsp');
console.log(api);
}
};
...
}
如果您需要任何更多的信息,请让我知道。
感谢
答
有一对夫妇因为下列原因:
(1)你需要的反应电汇到你的模板,以确保进入Messages
的时机是正确的。这是通过使用Session
变量来设置负载,并通过将Template.scroll.Messages
设置为等于返回collection cursor的函数来实现的。通常,如果Template.scroll.Messages
返回使用Session
对象(即roomId)的查询,则无需以此方式设置会话。如果是这种情况,您可以放弃拨打Meteor.subscribe
电话的呼叫以及完全“加载”的Session
。
(2)你要关闭autopublish
(流星删除自动发布),并明确订阅数据,让你知道当你收集载荷;
(3)您必须在isClient
块之外声明您的消息Collection
以确保服务器知道它。
HTML:
<template name="scroll">
<div class="rectangle">
<div style="height:100px;overflow:auto;" id="chatWindow">
{{#each Messages}}
{{#if isMe this}}
<div class="bubble me">{{text}}</div>
{{else}}
<div class="bubble you">{{text}}</div>
{{/if}}
{{/each}}
</div>
</div>
</template>
JS:
Messages = new Meteor.Collection("messages");
if (Meteor.isClient) {
Meteor.subscribe("messages", function() {
Session.set("loaded", true);
});
Template.scroll.rendered = function() {
if (Session.get("loaded")) {
$(this.find("#chatWindow")).jScrollPane();
var api = $(this.find("#chatWindow")).data("jsp");
...
}
};
Template.scroll.helpers({
isMe: function (msg) {
return msg.userName === 'me';
}
});
Template.scroll.Messages = function() {
return Messages.find({});
};
}
if (Meteor.isServer) {
Meteor.startup(function() {
if (Messages.find().count() === 0) {
Messages.insert({ text: 'Message 1', userName: 'me' });
Messages.insert({ text: 'Message 2', userName: 'you' });
Messages.insert({ text: 'Message 3', userName: 'me' });
}
});
Meteor.publish("messages", function() { return Messages.find({}); });
}
我无法得到它的工作,所以我只是删除插件。事实证明,我甚至不需要它。然而,我确实使用了一些代码来初始化其他JQuery插件。我发现在订阅中设置会话变量是一个很好的提示。非常感谢!如果有人遇到同样的问题,请在此处注释。 – PTBG