1
我正在使用Meteor和React。當我加載一個頁面時,Iron Router在一個集合中創建一個文檔。然後它使用Meteor.method來查找用戶的權限並將其設置在文檔上並進行更新。同時,客戶端頁面正在加載併爲集合中的文檔運行查詢。流星法clobbers訂閱查詢
看來,Meteor.method代碼正在破壞客戶端上的查詢。通過多個查詢,該文件存在,我可以console.log()它。然後突然我得到「未定義」。該文件仍然存在,因爲我可以從另一個Meteor.call查詢它。我已經使用發佈/訂閱,但客戶端無法看到它。
下面是一些我的代碼(文件合併爲簡單起見):
Editors = new Mongo.Collection('editors');
if (Meteor.isServer())
Meteor.publish('editors', function (editorId) {
return Editors.find(editorId) || this.ready();
});
Meteor.methods({
setEditorMode: function (editorId, userId) {
var editor = Editors.findOne(editorId);
var role = Roles.find({
doc_id: editor.manuscriptId,
user_id: userId
}).fetch()[0];
var defaultEditorMode = "readOnly";
if (role !== null && role.role == 'owner' || role.role == 'contributor') {
defaultEditorMode = "readWriteComment";
} else if (role !== null && role.role == 'reviewer') {
defaultEditorMode = "readComment";
}
console.log(editor);
Editors.update(editor._id, {
$set: {
defaultEditorMode: defaultEditorMode,
editorMode: defaultEditorMode
}
});
console.log(Editors.findOne(editor._id);
}
});
}
if (Meteor.isClient()) {
Router.route('/documents/:id/edit', function() {
var editorId;
manuscriptId = this.params.id;
this.wait(/* Doing some work */);
if (this.ready()) {
editorId = Editors.insert({manuscriptId: manuscriptId});
Meteor.call('setEditorMode', editorId, Meteor.userId());
this.render('editor', {
data: function() {
return {
editorId: editorId
};
}
});
} else {
this.render('loading');
}
});
Editor = React.createClass({
mixins: [ReactMeteorData],
componentWillMount: function() {
Meteor.subscribe('editors', this.props.editorId);
},
getMeteorData: function() {
var editor, editorId;
editorId = this.props.editorId;
editor = Editors.findOne(editorId);
console.log(editor);
return {
editor: editor || {}
};
},
render: function() {
return <EditorContent editor={this.data.editor} />
}
});
}
我需要在服務器上更新,以便它可以安全地發生。我的期望是,服務器上文檔的任何更新都會傳播到客戶端。相反,一旦我在服務器上進行更新getMeteorData()被調用並且查詢返回「undefined」。
如何獲得我剛在服務器上設置的值?
更新裏面我Meteor.subscribe代碼:我註釋掉在Meteor.methods更新,但我仍然得到這個問題。在進一步的測試中,我已經爲來自客戶端的文檔安排了額外的更新,但是當我從客戶端查詢(服務器仍然獲得更改)時,我從來沒有獲得除「未定義」之外的任何內容。我怎樣才能調試Meteor.subscribe? – Manuscript80
我想你試過console.log你的editorId通過你的不同的組件,並確保在你的mongoDB /流星外殼的條目是正確的插入和更新。你有沒有嘗試將你的訂閱放入你的getMeteorData或者刪除|| this.ready()來自出版物?我對你的風格不熟悉,但這些是我不確定的唯一觀點。 – ko0stik