2017-02-25 66 views
0

我有這樣一個例子流星應用:啓用Tracker的自動運行功能需要什麼?

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修改的文件,一個自動運行的功能應該被解僱,但事實並非如此。所以我的問題是:在修改訂閱數據之後應該滿足什麼條件才能啓動自動運行功能?

回答

2

你有2個錯誤的位置:

  1. 一個Tracker.autorun只有在它包裝(一個作爲其參數)的功能檢測的變化。在這裏,您只有一個console.log,它不是自動運行可以看的反應性來源。

  2. Pub/Sub機制與文檔本身之間存在差異。修改文檔時,您的訂閱不會更改。但是,如果您在自動運行中放置收集查詢,那麼查詢返回的遊標是一個反應性來源,在文檔被修改時會被更改。

所以,你可以這樣做:

Meteor.startup(() => { 
    Meteor.subscribe('things'); 

    Tracker.autorun(() => { 
     Things.find(); // <= Reactive source 
     console.log('AUTORUN'); 
    }); 
}); 
+0

好吧,謝謝 - 這樣我可以看到,'autorun'功能,只有當它裏面的一些數據在物理上(用'fetch'或運行' findOne')?我是否明白,只有在這種情況下才有可能實現這種反應,或者他們是否有其他方法來實現這一目標? –

+1

任何是_reactive source_。通常['Session'](http://docs.meteor.com/api/session.html)和['ReactiveVar'](http://docs.meteor.com/api/reactive-var.html)除了一個Collection遊標。 – ghybs

相關問題