2016-03-07 51 views
1

TLDR流星 - 無對象/類

我喜歡真正專注於從視圖模型/控制器保持業務邏輯了。我發現這在流星中有時相當困難。也許我錯過了這一點,但我真的在兩件事之一:

1)一個非常好的文件解釋如何使用反應值如何在一個非常低的水平。 2)以某種方式管理對象的軟件包,以便如果任何設置者被更改,他們會通知所有將因此而改變的獲取函數。

不幸的是我還沒有見過。

我的例子

我有一個公平位OB業務邏輯坐在用於記錄一個諮詢一個對話框後面。我可能有一個事件來設置狀態的改變。

我想要做的是這樣的事件:

const cc = new ConsultationEditor(); 
cc.setChiefComplaint(event.target.value); 
console.log(cc.data()); 
ConsultationDict.set("consEdit", cc.data()); 

當用戶更新了這個值,我則喜歡展示一些領域的基礎上的變化。爲此,我有以下人員的幫手:

fields: function(){ 
    console.log("trying to get fields"); 
    const obj = ConsultationDict.get('consEdit'); 
    cc = new ConsultationEditor(obj); 
    return cc.getFields(); 
} 

但不幸的是,這並不適用於我。

回答

1

什麼是您的ConsultationDict

你描述它的方式,你想要它是一個ReactiveDict正如在官方的ReactiveDict包。

https://atmospherejs.com/meteor/reactive-dict

檢查本教程的例子:

https://themeteorchef.com/snippets/reactive-dict-reactive-vars-and-session-variables/

如果你真的需要在你的反應更微調,您還可以設置一個依賴跟蹤tracker = new Tracker.Dependency,然後引用它的地方你用tracker.changed()更改一個變量,其中數據需要用tracker.depend()這樣的來通知:

var favoriteFood = "apples"; 
var favoriteFoodDep = new Tracker.Dependency; 

var getFavoriteFood = function() { 
    favoriteFoodDep.depend(); 
    return favoriteFood; 
}; 

var setFavoriteFood = function (newValue) { 
    favoriteFood = newValue; 
    favoriteFoodDep.changed(); 
}; 

getFavoriteFood(); 

看到完整的跟蹤文檔在這裏:

https://github.com/meteor/meteor/wiki/Tracker-Manual

我也發現了這個要點是有用的建立反應對象:

https://gist.github.com/richsilv/7d66269aab3552449a4c

和一個視圖模型類型的行爲,檢查out

https://viewmodel.meteor.com/

我希望這有助於。

+0

'ConsultationDict'是一個反應詞典。我知道它的工作原理,但是在我寫上述內容時有些奇怪,而且在進行其他更改後我現在無法複製它。抱歉。 – Hans