这是todo列表教程的片段。变量checked
在客户端和服务器端都有表示?客户端和服务器如何通信以使checked
保持一致?
Template.task.events({
'click .toggle-checked'() {
// Set the checked property to the opposite of its current value
Tasks.update(this._id, {
$set: { checked: ! this.checked },
});
},
'click .delete'() {
Tasks.remove(this._id);
},
});
答案 0 :(得分:0)
checked
是在Tasks
对象上定义的attrubite,如此应用中所定义。
在Meteor中,此对象的最终记录存储在服务器上(在MongoDB
中),但是此处还有一个客户端缓存,也称为MiniMongo
。 Meteor框架在后台(通过DDP
协议)完成了大量工作,以使服务器和客户端对象保持同步。
在这种情况下,当用户点击'click .toggle-checked'
方法中的复选框(触发Tasks.update
事件代码)时,会发生以下情况:
Optimistic UI
,并使客户端UI能够快速响应(无需等待服务器)Meteor Method
变量设置为新值,向客户端要更新Tasks
对象的服务器(clicked
)发送消息。MongoDB
对象的Tasks
版本,或拒绝处理更新。DDP
Tasks
对象生成状态的DDP
更新。MiniMongo
更新,并将使用服务器版本的Tasks
对象替换其Tasks
版本,以确保所有客户端与服务器现在在理想情况下,当服务器接受客户端更改时,发起客户端收到的新版本Tasks.update
(在步骤5中)将匹配它乐观更新的对象(在步骤1中)。
但是,通过实施所有这些步骤,Meteor框架还会同步其他客户端,并在服务器拒绝更新时处理这种情况,或者可能根据应用程序修改其他字段。
幸运的是,这一切都是由Meteor框架处理的,所有你需要做的就是调用Option Explicit
Sub Execute()
'
' Execute Macro
'
'
Dim pricewithdollar As String
Dim pricewithoutdollar As String
Dim price As Double
Dim qty As Double
Dim weight As Double
Dim i As Integer
Dim Amount As Double
pricewithdollar = ActiveDocument.Tables(1).Cell(8, 9).Range.Text
pricewithoutdollar = Replace(pricewithdollar, "$", "")
price = Val(pricewithoutdollar)
qty = Val(ActiveDocument.Tables(1).Cell(8, 1).Range.Text)
weight = Val(ActiveDocument.Tables(1).Cell(8, 6).Range.Text)
Amount = price * qty * weight
ActiveDocument.Tables(1).Cell(8, 10).Range.Text = Format(Amount, "Currency")
For i = 9 To 30
pricewithdollar = ActiveDocument.Tables(1).Cell(i, 10).Range.Text
price = Val(pricewithoutdollar)
Amount = Amount + price
Next i
pricewithdollar = ActiveDocument.Tables(1).Cell(32, 3).Range.Text
pricewithoutdollar = Replace(pricewithdollar, "$", "")
price = Val(pricewithoutdollar)
Amount = Amount + price
ActiveDocument.Tables(1).Cell(33, 3).Range.Text = Format(Amount, "Currency")
End Sub
来实现所有这些魔法!
答案 1 :(得分:-2)
流星喜欢模糊客户端和服务器之间的界限。您可以采取一些措施来抽象代码 - 例如,/server
目录中的javascript文件(在所有文件中)以限制对它的访问。这意味着客户端用户无法看到此代码。
/client
显然恰恰相反。您可以使用isClient
和isServer
检查文件。
现在,这对您的代码意味着什么?
根据代码的位置,有不同的访问级别。但是,在脚本里面,基本没有区别。 checked
在该脚本内的服务器/客户端上是已知的,因为这是Meteor运行的方式,客户端和服务器之间的模糊线使这成为可能。
Meteor采用了一种名为“无处不在的数据库”的东西,这意味着调用代码的位置并不重要,因为它会运行。