Javascript 如何在JS/varien/product.JS中重写JS函数?
我正在制作一个Magento扩展,它调用产品视图页面上的自定义JS文件。此自定义JS文件将最后加载,需要覆盖/JS/varien/product.JS底部的formatPrice()函数 原始formatPrice函数如下所示:Javascript 如何在JS/varien/product.JS中重写JS函数?,javascript,magento,Javascript,Magento,我正在制作一个Magento扩展,它调用产品视图页面上的自定义JS文件。此自定义JS文件将最后加载,需要覆盖/JS/varien/product.JS底部的formatPrice()函数 原始formatPrice函数如下所示: formatPrice: function(price) { return formatCurrency(price, this.priceFormat); } 我想用以下内容替换/覆盖此功能: formatPrice: function(price) { if (p
formatPrice: function(price) {
return formatCurrency(price, this.priceFormat);
}
我想用以下内容替换/覆盖此功能:
formatPrice: function(price) {
if (price % 1 == 0) { this.priceFormat.requiredPrecision = 0; }
return formatCurrency(price, this.priceFormat);
}
如何在自定义JS文件中编写JS代码,使其正确覆盖此函数?我对JS不太熟悉,所以不知道。如果它是全局的,那么你可以只做
window.formatPrice=myNewFormatPrice代码>如果它是一个对象的成员,那么您可以执行如下操作:anObject.formatPrice=myNewFormatPrice代码>
如果需要编辑对象的原型,请使用:Product.options.prototype.formatPrice=myFormatPrice代码>
您还需要查看所需精度的访问权限。如果它是“私有的”或“被保护的”,那么你就不能访问它。< P>。从功能的观点来看,J.HoLLOMAN的回答是正确的,你可以考虑这样做原型的方式,继承从<代码>产品。optsSp价格< /Cord>并使用那个新的类。这来自app\design\frontend\base\default\template\catalog\product\view.phtml
,第36行(我认为您需要更改它):
原创
<script type="text/javascript">
var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>
var optionsPrice=新产品。optionsPrice();
已修改
<script type="text/javascript">
var MyOptionPrice = Class.create(Product.OptionsPrice, { // inherit from Product.OptionsPrice
formatPrice: function($super, price) { // $super references the original method (see link below)
if (price % 1 === 0) {
this.priceFormat.requiredPrecision = 0;
}
return $super(price);
}
});
var optionsPrice = new MyOptionPrice(<?php echo $this->getJsonConfig() ?>); // use yours instead
</script>
var MyOptionPrice=Class.create(Product.optionprice,{//inherit from Product.optionprice
formatPrice:function($super,price){/$super引用了原始方法(参见下面的链接)
如果(价格%1==0){
this.priceFormat.requiredPrecision=0;
}
返回$super(价格);
}
});
var optionprice=新的MyOptionPrice();//用你的吧
使用(这样,您不必更改原始方法名称):
Product.OptionsPrice.prototype.formatPrice=Product.OptionsPrice.prototype.formatPrice.wrap(函数(父函数,价格){
如果(价格%1==0){
this.priceFormat.requiredPrecision=0;
}
返回父项(价格);
});
var optionsPrice=新产品。optionsPrice();
请参阅Prototype的继承和$super变量
再一次,我在Magento中看到了类似于@jholloman建议的代码,所以按照他的方式去做没有问题,但我想你可能想知道如何按照原型的方式去做。什么对象是formatPrice
的属性?它是全球性的吗?正如bfavaretto所说:它取决于formatPrice
的定义。我相信它位于Product.options.price.prototype中。使用该原型创建一个对象,使用行Product.OptionsPrice=Class.create()代码>紧接着声明Product.OptionsPrice.prototype.OK之前,我得到了它:函数myFormatPrice(price){if(price%1==0){this.priceFormat.requiredPrecision=0;}返回格式货币(price,this.priceFormat);}Product.OptionsPrice.prototype.formatPrice=myFormatPrice代码>谢谢你的帮助。谢谢。我理解这种做法的理由。
<script type="text/javascript">
Product.OptionsPrice.prototype.formatPrice = Product.OptionsPrice.prototype.formatPrice.wrap(function(parent, price) {
if (price % 1 === 0) {
this.priceFormat.requiredPrecision = 0;
}
return parent(price);
});
var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>