2015-06-26 18 views
0

初學者問題:我已經完成了Try Meteor教程。我的HTML文檔中有字段,由引用集合的輔助函數支持,而BOOM - >當數據在數據庫中發生更改時,字段會更新。在Meteor中,我在哪裏建立業務規則?

隨着「隱藏已完成」複選框,我也看到了數據綁定到一個會話變量。複選框的狀態通過事件處理程序存儲在Session對象中,BOOM - >列表視圖在其值更改時由其幫助程序「自動」更新。在單個頁面應用程序中分配會話對象似乎有點奇怪。

通過這一切,我的JS分配沒有在全球範圍內,我不會創建對象,我大多見於只是流水線代碼,從一個地方到另一個獲取值。小條件邏輯被噴射到需要的地方。

的問題...現在我要構建的javascript我的業務數據模型,造型我的業務規則,然後綁定HTML領域的這種模式。例如,我要的用戶模型,給它一個isVeryBusy財產,以及設定isVeryBusy規則= true,如果noTasks> 5.我想要的屬性和規則是在一個「純」業務對象從助手隔離,遠離,事件和流星用戶對象。我希望這些業務對象在任何地方都可用,因此我可以制定一個限制,例如,不要將任務分配給非常繁忙的用戶,並在服務器上執行。如果用戶是VeryBusy,我可能還希望顯示規則只顯示其他人員任務的前100個字符。哪裏是創建此用戶對象的正確位置,以及如何從我的HTML綁定到它?

+1

事實上,'Session'是一個全球性的反應性字典。你的問題非常廣泛,好的答案會很長(解釋如何爲用戶對象添加字段,如何發佈它們,查看/編輯它們,在方法調用中對它們作出反應,通過這些方法限制用戶的能力,...... )。請將您的問題縮小爲單一,明確,可識別的問題。例如,您的問題中的第一個問題有點「如何將約束添加到用戶的配置文件更新?」爲「非常繁忙」的限制。您還可以詢問如何通過聚合自動發佈「isVeryBusy」字段。 –

+0

我之前的評論缺乏空間。這裏有一些關於所有的鏈接:[Session](http://docs.meteor.com/#/full/session),[反應變量](http://docs.meteor.com/#/full/reactivevar_pkg) ,[Mongo aggregations](http://docs.mongodb.org/manual/reference/operator/aggregation/)。當你有很多問題時,最好自己開始做一些事情,或者至少每次問一兩個問題。哦,還有一點是文字的一面牆。水平線和空間有助於解決這個問題。 –

+0

對不起,我讓我自己去那裏。我已經調整了這個問題,現在我將查看鏈接信息。我很驚訝得知我可能需要一個插件manuel:viewmodel來綁定變量? – bbsimonbb

回答

1

可以(並且可能應該)使用任何包,它可以讓你的架構連接到您的模型。 看一看: https://github.com/aldeed/meteor-collection2 https://github.com/aldeed/meteor-simple-schema

通過使用模式可以定義字段,這是基於其他字段計算的,看到autoValue屬性:https://github.com/aldeed/meteor-collection2#autovalue

然後,你可以做這樣的事情:

// Schema definition of User 
{ 
    ..., 
    isVeryBusy: { 
    type: Boolean, 
    autoValue: function() { 
     return this.tasks.length > 5; 
    } 
    }, 
    ... 
} 

對於您所有的基本問題,我強烈建議您閱讀DiscoverMeteor Book(https://www.discovermeteor.com/)。你可以在1-2天內閱讀它,它會以真正理解的方式解釋所有這些基本問題。

最好的問候,

0

有一個非常好的軟件包來實現您正在尋找的解決方案。它由David Burles創建,它被稱爲「流星收藏助手」。這在atmosphere link

您應該檢查鏈接查看示例呈現有,但根據描述,你可以實現一些你所提到的這樣的功能:

// Define the collections 
Clients = new Mongo.Collection('clients'); 
Tasks = new Mongo.Collection('tasks'); 

// Define the Clients collection helpers 
Clients.helpers({ 
    isVeryBusy: function(){ 
    return this.tasks.length > 5; 
    } 
}); 

// Now we can call it either on the client or on the server 
if (Meteor.isClient){ 
    var client = Clients.findOne({_id: 123}); 
    if (client.isVeryBusy()) runSomeCode(); 
} 

// Of course you can use them inside a Meteor Method. 
Meteor.methods({ 
    addTaskToClient: function(id, task){ 
    var client = Clients.findOne({_id: id}); 
    if (!client.isVeryBusy()){ 
     task._client = id; 
     Tasks.insert(task, function(err, _id){ 
     Clients.update({_id: client._id}, { $addToSet: { tasks: _id } }); 
     }); 
    } 
    } 
}); 

// You can also refer to other collections inside the helpers 
Tasks.helpers({ 
    client: function(){ 
    return Clients.findOne({_id: this._client}); 
    } 
}); 

你可以看到裏面的幫手上下文是用您提供的所有方法轉換的文檔。由於集合對於客戶端和服務器都可用,因此您可以隨處訪問此功能。

我希望這會有所幫助。