Knockout asyncCommand - 从方法中命中

时间:2015-04-21 12:21:45

标签: asynchronous knockout.js

我想改变asyncCommand的命中方式(目前来自一个按钮),所以我需要从代码中访问asyncCommand。我不想改变这个asyncCommand正在做的事情,它正在处理付款细节。

我尝试过谷歌搜索,但我找不到任何东西,我也是KO的新手。

这就是我想要实现的目标:

  • 单击按钮(具有自己的asyncCommand方法的单独按钮) 检查标志)'执行'将执行以下操作:

if(flag) - show modal

  • modal有两个选项 - 继续/取消
  • 如果继续 - 点击原始按钮的asyncCommand命令(卡支付一个)。
  • 如果取消 - 返回表格

如果(!标志)

  • 点击原始按钮的asyncCommand命令(卡支付一个)。

可以这样做吗?

提前感谢您的帮助。

克莱尔

这是我尝试过的: 第一个按钮

   model.checkAddress = ko.asyncCommand({
        execute: function (complete)
        {
            makePayment.execute();
            if (data.shippingOutOfArea === true || (data.shippingOutOfArea === null && data.billingOutOfArea === true)) {
                model.OutOfArea.show(true);
            }

            complete();
        },
        canExecute: function (isExecuting) {
            return !isExecuting;
        }
    });

原始按钮

    model.makePayment = ko.asyncCommand({
        execute: function (complete) {
}})

模态

model.OutOfArea = {
    header: ko.observable("Out of area"),
    template: "modalOutOfArea",
    closeLabel: "Close",
    primaryLabel: "Continue",
    cancelLabel: "Change Address",
    show: ko.observable(false), /* Set to true to show initially */
    sending: ko.observable(false),
    onClose: function ()
    {
        model.EditEmailModel.show(false);
    },
    onAction: function () {
        makePayment.execute();
    },
    onCancel: function ()
    {
        model.EditEmailModel.show(false);
    }
};

1 个答案:

答案 0 :(得分:1)

此方案实际上有两个异步命令。一个打开模态,另一个打开模态。

例如:



showPaymentPromptCmd = ko.asyncCommand({
  execute: function(complete) {
    if (modalRequired) {
      showModal();
    } else {
      makePayement();
    }
    complete();
  },
  canExecute: function(isExecuting) {
    return !isExecuting;
  }
});

//Called by Continue button on your modal.
makePaymentCmd = ko.asyncCommand({
  execute: function(complete) {
    makePayement();
    complete();
  },
  canExecute: function(isExecuting) {
    return !isExecuting;
  }
});

var

function makePayement() {
  //some logic
}