我有一个例子Meteor app:
import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import { Mongo } from 'meteor/mongo';
Things = new Mongo.Collection('things');
if (Meteor.isClient) {
Meteor.startup(() => {
Tracker.autorun(() => {
console.log('AUTORUN');
});
Meteor.subscribe('things');
render(<div>Hello world</div>, document.getElementById('app'));
});
} else if (Meteor.isServer) {
Meteor.publish('things', function() {
return Things.find({});
});
}
我希望在修改Things
集合中的某个文档时,应该触发自动运行功能,但事实并非如此。所以我的问题是:在修改订阅数据后,应该满足什么条件才能解除自动运行功能?
答案 0 :(得分:2)
你有两个错误:
console.log
仅检测其包装的函数内的更改(作为其参数的更改)。这里只有Meteor.startup(() => {
Meteor.subscribe('things');
Tracker.autorun(() => {
Things.find(); // <= Reactive source
console.log('AUTORUN');
});
});
,这不是自动运行可以观察的反应源。
Pub / Sub机制与文档本身之间存在差异。修改文档时,您的订阅不会更改。但是,如果在自动运行中放置Collection 查询,则查询返回的游标是在文档被修改时更改的反应源。
所以你可以这样做:
try {
Log.d(TAG, "onPostExecute: this inner of post" + getcontent_for_validate);
jsonobj = new JSONObject(getcontent_for_validate);
System.out.println("this is get content" + jsonobj.toString());
JSONArray array = jsonobj.getJSONArray("Staff_Details");
for (int i = 0; i < array.length(); i++) {
Clint_id = editText_user_name.getText().toString();
Api_key = array.getJSONObject(i).getString("api_key");
COMPANY_LOGO = array.getJSONObject(i).getString("company_logo");
Password = editText_password.getText().toString();
}
} catch (JSONException e) {
e.printStackTrace();
}