例如,在这个控制器方对象自动更新时,另一个用户更改Paries集合,但我们如何捕获此更新并运行一些控制器逻辑?
this.helpers({ parties: () => Parties.find({}) });
指明的问题: 收到的答案并不能解决我的问题,因为它不是服务器逻辑或我需要在更新时执行的任何数据库操作。实际上它是我需要运行的控制器逻辑。
在以下示例中,如果未更改表单,则禁用提交按钮。 isFormChange函数将party与originalParty进行比较。当聚会从服务器端更改时,我需要重新定义originalParty值。那我怎么能这样做呢?
<form ng-submit="vm.updateParty()">
<input type="text" ng-model="vm.party.name">
<input type="submit" ng-disabled="!vm.isFormChanged()" value="Submit">
</form>
指令控制器:
function Ctrl($scope, $reactive) {
let vm = this;
$reactive(vm).attach($scope);
vm.helpers({ party: () => Parties.findOne({_id: vm.partyId}) });
let originalParty = angular.copy(vm.party);
vm.isFormChanged = isFormChanged;
vm.updateParty = updateParty;
function isFormChanged() {
return !angular.equals(vm.party, originalParty);
}
function updateParty() {
Meteor.call('updateParty', vm.party._id, vm.party.name);
}
}
答案 0 :(得分:1)
使用collection-hooks包在更新,升级,插入和删除之前或之后运行代码。
myCollection.after.update(userId, doc, fieldNames, modifier, options){
...your code
}
答案 1 :(得分:0)
如果您在Meteor methods中拥有数据库功能,则可以在服务器上运行逻辑。
示例:
Parties = new Mongo.Collection("parties");
if (Meteor.isClient) {
// This code only runs on the client
Meteor.subscribe("parties");
/* a helper or event can run the Meteor.call() */
var partyData = {}; // get partyData
Meteor.call("insertParty", partyData,
// callback function
function (error, result) {
if (error) { console.log(error); };
});
}
if (Meteor.isServer) {
// This code only runs on the server
Meteor.publish("parties", function () {
return Parties.find({});
});
Meteor.methods({
insertParty: function (partyData) {
// insert logic to run on partyData here
Parties.insert(partyData);
}
})
}