Javascript meteorjs用户权限未与服务器同步
我是meteorjs和MongoDB的新手。 我在Win 7上运行meteor,我遵循isaac strack的“meteor.js JavaScript框架入门”,我停留在第6章“授予管理员权限” 我在遵循他的代码,但似乎在管理员登录时,我在列表中添加了一个项目,该项目显示为一个分离的部分,可能是因为本地缓存和服务器同步 但我做错了什么? 我的代码: 客户端:Javascript meteorjs用户权限未与服务器同步,javascript,mongodb,meteor,client-side,server-side,Javascript,Mongodb,Meteor,Client Side,Server Side,我是meteorjs和MongoDB的新手。 我在Win 7上运行meteor,我遵循isaac strack的“meteor.js JavaScript框架入门”,我停留在第6章“授予管理员权限” 我在遵循他的代码,但似乎在管理员登录时,我在列表中添加了一个项目,该项目显示为一个分离的部分,可能是因为本地缓存和服务器同步 但我做错了什么? 我的代码: 客户端: Meteor.subscribe('Categories'); Meteor.autosubscribe(function() {
Meteor.subscribe('Categories');
Meteor.autosubscribe(function() {
Meteor.subscribe("listdetails",
Session.get('current_list'));
});
Template.categories.lists = function () {
return lists.find({},{sort: {Category: 1}});
};
Session.set('adding_category', false);
Template.categories.new_cat = function () {
return Session.equals('adding_category',true);
};
Template.categories.events({
'click #btnNewCat': function (e, t) {
Session.set('adding_category', true);
Meteor.flush();
focusText(t.find("#add-category"));
},
'keyup #add-category': function (e,t){
if (e.which === 13)
{
var catVal = String(e.target.value || "");
if (catVal)
{
lists.insert({Category:catVal,owner:this.userId});
Session.set('adding_category', false);
}
}
},
'focusout #add-category': function(e,t){
Session.set('adding_category',false);
},
'click .category': selectCategory
});
/////Generic Helper Functions/////
//this function puts our cursor where it needs to be.
function focusText(i,val) {
i.focus();
i.value = val ? val : "";
i.select();
};//< -----This is the end tag for focusText() -----
function selectCategory(e,t){
Session.set('current_list',this._id);
}
function addItem(list_id,item_name){
if (!item_name&&!list_id)
return;
lists.update({_id:list_id},
{$addToSet:{items:{Name:item_name}}});
}
function removeItem(list_id,item_name){
if (!item_name&&!list_id)
return;
lists.update({_id:list_id},
{$pull:{items:{Name:item_name}}});
}
function updateLendee(list_id,item_name,lendee_name){
var l = lists.findOne({"_id":list_id ,
"items.Name":item_name});
if (l&&l.items)
{
for (var i = 0; i<l.items.length; i++)
{
if (l.items[i].Name === item_name)
{
l.items[i].LentTo = lendee_name;
}
}
lists.update({"_id":list_id},{$set:{"items":l.items}});
}
};
Template.list.items = function () {
if (Session.equals('current_list',null)) return null;
else
{
var cats = lists.findOne({_id:Session.get('current_list')});
if (cats&&cats.items)
{
for(var i = 0; i<cats.items.length;i++) {
var d = cats.items[i]; d.Lendee = d.LentTo ? d.LentTo :
"free"; d.LendClass = d.LentTo ?
"label-important" : "label-success";
}
return cats.items;
}
}
};// < ---- ending bracket for Template.list.items function ----
Template.list.list_selected = function() {
return ((Session.get('current_list')!=null) &&
(!Session.equals('current_list',null)));
};
Template.categories.list_status = function(){
if (Session.equals('current_list',this._id))
return "";
else
return " btn-inverse";
};
Template.list.list_adding = function(){
return (Session.equals('list_adding',true));
};
Template.list.lendee_editing = function(){
return (Session.equals('lendee_input',this.Name));
};
Template.list.events({
'click #btnAddItem': function (e,t){
Session.set('list_adding',true);
Meteor.flush();
focusText(t.find("#item_to_add"));
},
'keyup #item_to_add': function (e,t){
if (e.which === 13)
{
addItem(Session.get('current_list'),e.target.value);
Session.set('list_adding',false);
}
},
'focusout #item_to_add': function(e,t){
Session.set('list_adding',false);
},
'click .delete_item': function(e,t){
removeItem(Session.get('current_list'),e.target.id);
},
'click .lendee' : function(e,t){
Session.set('lendee_input',this.Name);
Meteor.flush();
focusText(t.find("#edit_lendee"),this.LentTo);
},
'keyup #edit_lendee': function (e,t){
if (e.which === 13)
{
updateLendee(Session.get('current_list'),this.Name,
e.target.value);
Session.set('lendee_input',null);
}
if (e.which === 27)
{
Session.set('lendee_input',null);
}
}
});
Accounts.ui.config({
passwordSignupFields: 'USERNAME_AND_OPTIONAL_EMAIL'
});
两者:
html:
伦德利卜
{{loginButtons align=“right”}
{{>类别}
{{>列表}
我的东西
{{{如果是新猫}
{{else}
&加;
{{/if}
{{{#每个列表}
{{Category}}
{{/每个}}
{{{#每项}
-
×
{{Name}}
{{{#如果lendee_编辑}
{{else}
{{Lendee}}
{{/if}
{{/每个}}
{{{#如果选择了列表}
- &plus;
{{{if list_adding}
{{/if}
{{/if}
经过多次调试尝试并失败后,我修复了问题,问题出在服务器端这是原始代码:
Meteor.startup(function () {
Meteor.publish("Categories", function() {
return lists.find({owner:this.userId},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
});
这是固定代码:
Meteor.startup(function () {
Meteor.publish("Categories", function() {
return lists.find({owner:Meteor.userId},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
});
注意:更改是在第3行完成的,而不是所有者:this.userId-存在的内容我将其替换为Meteor.userId在进行了大量调试尝试并失败后,我修复了问题,问题出现在服务器端这是原始代码:
Meteor.startup(function () {
Meteor.publish("Categories", function() {
return lists.find({owner:this.userId},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
});
这是固定代码:
Meteor.startup(function () {
Meteor.publish("Categories", function() {
return lists.find({owner:Meteor.userId},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
});
注意:更改是在第3行完成的,而不是所有者:this.userId-我将其替换为Meteor.userId
Meteor.userId
是一个函数,您确定不应该改为使用Meteor.userId()
?但是这应该相当于这个.userId
::我不知道为什么使用这个.userId时它不工作可能是个bug?我真的不知道,这个配偶相当于Meteor global obj,但它不是:我真的被卡住了,因为我试图在用户列表之间进行分类,目前它不起作用,它们相互影响,没有分类Meteor。userId
是一个函数,确定你不应该改为使用Meteor.userId()
?但是这应该相当于这个.userId
::我不知道为什么使用这个.userId时它不工作可能是个bug?我真的不知道,这个配偶相当于流星全球obj,但它不是:我真的卡住了,因为我试图在用户列表之间建立一个速度,目前它不起作用,它们相互影响,没有速度
Meteor.startup(function () {
Meteor.publish("Categories", function() {
return lists.find({owner:Meteor.userId},{fields:{Category:1}});
});
Meteor.publish("listdetails", function(category_id){
return lists.find({_id:category_id});
});
});