66
A
回答
99
所以它實際上是相當簡單的,在基本層面上有涉及2種功能:
功能是產生反應上下文(反應函數)
功能是無效的反應上下文(無效功能)
可以執行兩者的功能。 (我撒謊有3)
當你調用一個reactive function
它會創建一個context
是流星商店在全球和該reactive function
簽約的invalidation
回調。您傳遞給反應函數的函數或從其中運行的任何函數都可以是invalidating function
,並且可以獲取當前的context
並將其存儲在本地。這些功能隨時可以在數據庫更新或簡單地定時器調用時使該context
無效。原始reactive function
然後會收到該事件並重新評估自己。
這裏是一個循序漸進的使用流星功能步驟(注意,Tracker.autorun
過去被稱爲Deps.autorun
):
Tracker.autorun(function(){
alert("Hello " + Session.get("name"));
});
Session.set("name", "Greg");
- 自動運行需要一個函數作爲其參數
- 自動運行運行此功能之前,它創建a
context
- autorun將回調附加到
context
的失效事件 - 此回調將重新運行傳遞給自動運行的函數
- 函數然後首次在
context
中運行。 - 流星存儲該全局
context
作爲當前激活的context
- 該函數內部有另一個功能:Session.get()
- Session.get()既是一種
reactive function
和invalidating function
- Session.get套多達它自己的
context
和同事在內部與來自全球的流星 - 的無效回調Session.get註冊到我的鑰匙「名」
- Session.get檢索當前上下文(自動運行的情況下) T公司自己的情況下,將簡單地無效它的封閉環境(在這種情況下,自動運行的情況下)
- 所以現在我們有2個上下文,自動運行的和session.get的
當這些函數返回,流星清理活動上下文全局變量
Session。設置是另一個功能,可以使
在這種情況下context
無效。- 我們通過無效會話創建的所有
context
s的關鍵「名」 - 那些
contexts
的一切,當失效,運行其無效的回調有關。 - 這些回調只是無效及其外圍
context
秒(這是Session.get的設計,而不是什麼無效回調必須做) - 那些封閉
contexts
現在運行的無效回調。 - 在自動運行的情況下,該回調運行我們最初傳遞給自動運行的函數,然後再次設置
context
。
整體實現實際上是相當簡單的,以及,你可以在這裏看到:
https://github.com/meteor/meteor/blob/master/packages/tracker/tracker.js
以及它是如何工作的一個很好的例子可以在這裏找到:
https://github.com/meteor/meteor/blob/master/packages/reactive-dict/reactive-dict.js
反應式編程實際上並不是流星或JS特定的
你可以在這裏閱讀:http://en.wikipedia.org/wiki/Reactive_programming
相關問題
- 1. 流星+反應+ createcontainer
- 2. 流星/反應 - 如何等待Meteor.user()
- 3. 如何在流星/反應設置中製作全屏圖片?
- 4. 流星+反應 - window.onpopstate不起作用
- 5. 流星對Gcloud作出反應
- 6. 反應+解析或反應+流星?
- 7. 反應Komposer,反應和流星
- 8. 流星反應性來源
- 9. 遷移到流星/反應
- 10. 反應和流星訂閱
- 11. 流星和反應本機
- 12. 流星反應拖放
- 13. 流星反應fullcalendar實施
- 14. 流星/反應問題,getElementById
- 15. 流星 - createContainer反應變量
- 16. 流星反應似乎
- 17. 流星和反應:幫手
- 18. 自定義過濾與反應表流星包不工作
- 19. 流星會議對象不能反應工作
- 20. 流星Cron工作
- 21. 升級後流星停止工作
- 22. JQuery的.click()如何在幕後工作?
- 23. 在流星/反應中使用ReactiveVars
- 24. 默認值發生反應,在流星
- 25. 流星^ 1.5.2與反應。在生產
- 26. 在流星和反應中使用Bootstrap
- 27. CGPoint變量如何在幕後工作?
- 28. 顫振 - 它在幕後如何工作?
- 29. CreateRemoteThread如何在幕後工作?
- 30. 沒有autorun()的流星反應?
很酷的感謝這個好解釋 – 2012-11-07 12:50:26
很好的解釋這應該是在流星頁面。 – alejandro 2012-11-08 19:24:15
這個視頻是非常有幫助的http://www.eventedmind.com/posts/meteor-reactivity-with-contexts – jonperl 2013-01-29 16:05:37