需要JS的回调

时间:2015-05-28 22:31:24

标签: javascript require

因此,我尝试制作两个功能,允许用户将商品从购物车移动到“保存的购物车”中。反之亦然。这些功能取决于"购物车组项目"模块,其中还包含按钮单击的事件。我的问题是,我不确定如何正确调用这些函数以允许click事件发生在我当前的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]);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的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模块返回cartGroupItem,因此在您的文件模块中:

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