使用 Require JS 的回调

Callbacks with Require JS

所以我正在尝试制作两个功能,允许用户将商品从他们的购物车移动到 "saved cart",反之亦然。这些功能依赖于 "cart group item" 模块,该模块还包含按钮点击事件。我的问题是,我不确定如何正确调用这些函数以允许在我当前的 js 文件中发生点击事件。希望有人能帮忙!

事件在模块中:

cartGroupItem.prototype.createMoveEvent = function (elem) {
  if (undefined !== elem && null !== elem) {
    var button = elem.querySelector('.cartGroupItem__move');
    if (button !== null) {
      button.addEventListener('click', function (e) {
        ajax('GET',
               '/resources/ajax/cart.aspx?sub=3&Saved=0&Cart_Group_ID='+this.cartGroupId,
          true, {}, function () {
            this.moveToCartCallback();
          }.bind(this), function () {
            this.showErrorDiv();
          }.bind(this));
      }.bind(this));
    }
  }
};

cartGroupItem.prototype.createSaveEvent = function (elem) {
  if (undefined !== elem && null !== elem) {
    var button = elem.querySelector('.cartGroupItem__save');
    if (button !== null) {
      button.addEventListener('click', function (e) {
        ajax('GET',
               '/resources/ajax/cart.aspx?sub=3&Saved=1&Cart_Group_ID='+this.cartGroupId,
          true, {}, this.saveForLaterCallback.bind(this), this.showErrorDiv.bind(this));
      }.bind(this));
    }
  }
};

移动函数:

function moveToSaved(cartGroupId) {
    for (var i = 0, l = activeCartList.length; i < l; i++) {
        if (activeCartList[i].cartGroupId === cartGroupId) {
            activeCartList.remove();
            savedCartList.push(activeCartList[i]);
        }

    }
}

function moveToActive(cartGroupId) {
    for (var i = 0, l = savedCartList.length; i < l; i++) {
        if (savedCartList[i].cartGroupId === cartGroupId) {
            savedCartList.remove();
            activeCartList.push(savedCartList[i]);
        }
    }
}

您的 Event 模块可能定义了函数 cartGroupItem 对吗?

您需要做的是将此函数从其文件传递到您的当前文件,然后 "instanciate" 一个 carteGroupItem:

// In your current JS file
var myCartGroupItem = new cartGroupItem();
myCartGroupItem.createMoveEvent();
myCartGroupItem.createSaveEvent();

我们还需要查看此函数 "constructor"(定义的位置),因为它可能需要一些回调作为参数。否则您可以手动添加它们:

myCartGroupItem.moveToCartCallback = function() {
  // do what you want when the item is moved to cart
};
// Same for the other callbacks
myCartGroupItem.saveForLaterCallback = function() { ... };
myCartGroupItem.showErrorDiv = function() { ... };

最后,用 RequireJS 传递东西的方法是,例如,你的 Event 模块 returns cartGroupItem 所以在你的文件模块中:

define(['Event'], function(cartGroupItem) {
  // Your code where you can use cartGroupItem
});