3

我有一个在事件处理程序中更新的集合,并且正在更新集合,如果它是成功或失败,我想获得更新的结果,以便我可以根据其结果执行一些逻辑。即重置会话值等。

我一直只是在 if 块内测试 db 操作本身以进行插入,这工作正常,但这似乎不适用于更新。

Template.customers_update.events({
'click a#cancel, click button#close' : function(event) {
    event.preventDefault();
    Session.set("editCustomer", false);
    Session.set("customerId", null);
},

'click input[type=submit], submit form#create_customer' : function (event) {
    event.preventDefault();

    var customer_name = $("#customer_name").val();
    var customer_address = $("#customer_address").val();
    var customer_city = $("#customer_city").val();
    var customer_state = $("#customer_state").val();
    var customer_zip = $("#customer_zip").val();
    var customer_phone = $("#customer_phone").val();
    var customer_fax = $("#customer_fax").val();
    var customer_eda = $("#eda_number").val();
    var customer_duns = $("#duns_number").val();

    if (Customers.update(Session.get("customerId"), {$set: {user_id: Meteor.user()._id, name: customer_name, address: customer_address, city: customer_city, state: customer_state, zip: customer_zip, phone: customer_phone, fax: customer_fax, eda_number: customer_eda, duns_number: customer_duns}})) {
        console.log("Update Sucsess");
        Session.set("editCustomer", false);
        Session.set("customerId", null);

   }
 }
});

并在服务器中设置为允许并返回 true

Customers.allow({
insert: function (userID, customer) {
        return userID === customer.user_id;
  },

update: function (userID, customer) {
    return userID === customer.user_id;
},

remove: function (userID, customer) {
    return userID === customer.user_id;
}

});
4

2 回答 2

4

使用第三个参数callbackdocs

回调函数

可选的。如果存在,则以错误对象作为其参数调用。

于 2013-06-03T22:12:11.050 回答
3

您的代码可能无法正常工作,因为 .update() 只会在服务器上引发异常。从文档:

在服务器上,如果您不提供回调,则更新阻塞,直到数据库确认写入,或者如果出现问题则抛出异常。如果您确实提供了回调,更新会立即返回。更新完成后,在失败的情况下使用单个错误参数调用回调,如果更新成功则不使用任何参数。

在客户端,更新从不阻塞。如果您不提供回调并且服务器上的更新失败,则 Meteor 将向控制台记录警告。如果您提供回调,Meteor 将在出现错误时使用错误参数调用该函数,如果更新成功则不使用参数。

将其更改为:

var updateQuery = {$set: {user_id: Meteor.user()._id, name: customer_name, address: customer_address, city: customer_city, state: customer_state, zip: customer_zip, phone: customer_phone, fax: customer_fax, eda_number: customer_eda, duns_number: customer_duns}}
Customers.update(Session.get("customerId"), updateQuery, function (error) {
    //on error do this
});
于 2013-06-04T02:34:14.213 回答