我正在创建一个 Meteor Web 应用程序,用户可以订购商品,但用户必须等待后端人员更改订单状态。
用户提交订单,屏幕上显示消息订单待处理。
我有一个特定的订单对象,其中有一个名为 status 的变量,该变量设置为 pending
。
我们现在必须等待管理员从后端将状态更改为已接受
或已拒绝
。
如果订单状态更改为已接受,我需要根据订单 ID 重定向到订单已处理页面。
我的问题是我不知道如何等待订单状态更改。
这是我现在所拥有的
Meteor.call('placeOrder',cartSession,deliveryDetailsId,payment,function(error,result){
if(error){
console.log('ERROR :', error);
}else{
console.log('response:', result);
var pendingOrder = Orders.findOne({_id:result});
console.log("pendingOrder");
console.log(pendingOrder);
//the order status of the pendingOrder is 'pending' at this moment
$('#order-processing').text('order is processing');
//i must now wait for the status to change to accepted or declined
}
});
作为 Marius Darila 的评论,我添加了订单出版物
Meteor.publish('userorders', function () {
if(this.userId){
return Orders.find({userId:this.userId});
}
this.ready();
});
用户无法插入、更新或删除订单,这只发生在服务器端
我在我的meteor方法回调函数中添加了这段代码
if(pendingOrder.orderStatus =="accepted"){
Router.go('/orderProcessed',{orderId:pendingOrder._id})
}
下面的 Marius 表示,如果 orderStatus 更改,此代码将重新运行, 但代码没有运行
Marius Darila 如何帮助我回答这个问题
因为我从当前用户订单的服务器返回一个 ID
我设置了一个Session.set("orderId", orderId)
然后在模板帮助程序 orderstatus
中,我们在订单数据库中找到当前订单,并在此帮助程序中完成我们的逻辑。
如果订单处于待处理状态,则显示订单处于待处理状态 当订单被接受时,将用户引导至 orderConfirmed 页面。
最佳答案
Db 是一个响应式(Reactive)数据源,因此在您的客户端代码中应该包含如下内容:
var order = Orders.findOne({_id:result});
if(order.accepted == 1){
Router.go("someUrlName", {product: order._id});
}else{
$('#order-processing').text('order is processing');
}
此示例使用iron-router进行重定向。
关于javascript - 用于等待数据库变量更改然后在之后执行某些操作的 meteor 技术/模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943620/