Shopify提供Shopify
JavaScript对象,如下图所示
您也可以通过访问Shopify store的此链接亲自查看。打开控制台并输入
Shopify
现在,我需要修改addItem
函数的行为。我们可以在JavaScript中覆盖一个函数,但是当我稍后在任何文件中访问Shopify.addItem
时它会undefined
。为了清楚起见,Shopify
对象以及所有函数定义都在theme.js
文件中定义,我试图覆盖的我的代码段在此文件下方添加。我能够访问Shopify
对象,但我无法访问此功能,因此无法覆盖它。以下是Shopify.addItem的定义。
Shopify.addItem = function(variant_id, quantity, callback) {
var quantity = quantity || 1;
var params = {
type: 'POST',
url: '/cart/add.js',
data: 'quantity=' + quantity + '&id=' + variant_id,
dataType: 'json',
success: function(line_item) {
console.log('in add Item');
if ((typeof callback) === 'function') {
callback(line_item);
}
else {
Shopify.onItemAdded(line_item);
}
},
error: function(XMLHttpRequest, textStatus) {
Shopify.onError(XMLHttpRequest, textStatus);
}
};
jQuery.ajax(params);
};
(function(){
var originalAddItem = Shopify.addItem;
Shopify.addItem = function(){
console.log('in overriden function');
return originalAddItem.apply(this,arguments);
};
})();
console.log(Shopify)
它仍然包含函数的原始定义时。任何想法如何实现它?
答案 0 :(得分:0)
您的主题是加载提供Shopify对象的Javascript。您可以通过检查主题和加载Javascript的方式轻松验证。有两种方法可以实现这一目标。一个是获取Shopify发行的JS的副本并将其作为资产(asset_url过滤器)加载到您的主题中,而第二个是从Shopify母舰(shopify_asset_url过滤器)加载CDN版本。
示例:寻找
{{ 'shopify_common.js' | shopify_asset_url | script_tag }}
VS
{{ 'shopify_common_custom.js' | asset_url | script_tag }}
如果您抓住自己的副本并将其作为商店中的资产加载,您当然可以覆盖该对象和功能。自2006年以来我一直这样做,你也可以。您也可以取消Shopify代码并使用Gavin的CartJS,它是相同的API但更好。你的选择。