2017-07-14 58 views
-1

我不知道它是否特定於Magento 2,但是已經設置的jQuery節點附帶的jQuery change事件的HTML節點在淘汰組件中運行時將丟失其change事件與附加的VM(查看模型)。jQuery「更改」事件在敲除範圍內被刪除

情況在Magento:

我感動通過佈局XML的product options wrapper到定製塊

<referenceBlock name="product.info.form.options"> 
    // Custom block definition 
    <move element="product.info.options.wrapper" destination="custom.block" /> 
</referenceBlock> 

這沒有任何問題的作品!

現在,當解決此包裹移動的塊與Magentos custom "scope" binding淘汰賽模式中,所有應用onChange事件越來越刪除 - 這意味着在這種情況下,配置選項選擇框住禁用。

change事件得到應用here in configurable.js

$(element).on('change', this, this._configure); 

..這也似乎適合我如何添加事件。

在我的模板文件

所以我下面來總結我的淘汰賽組件(裝有VM)解決這個HTML片段:

<div class="tab-content" data-step="1" data-bind="scope:'times'"> 
    // all change events are removed from the configurable widget 
    <?php echo $block->getChildHtml('product_options_wrapper'); ?> 
</div> 

任何人都知道,如果這KnockoutJS和jQuery之間,或者如果這有什麼事與Magento做?

更新:

看來這是Magento的一個錯誤: https://github.com/magento/magento2/issues/10261

回答

1

您需要已應用於劫綁定後應用事件偵聽器並重新應用他們觀察到已經改變了。發生這種情況是因爲運行事件偵聽器時html不在那裏。

我能問你爲什麼使用jquery事件偵聽值的變化,如果輸入被KO的約束,你可以使用一個訂閱:

self.Value.subscribe(function (newValue) { 
    // Logic in here 
}); 
+0

的原始功能是默認的Magento - 產品詳細頁面,選擇框中有多個可配置的屬性...以及Magento使用jQuery事件監聽器;-)這非常好,但我需要KO模板中的這個完整塊來將自定義值應用於圍繞*此塊過濾器塊的標記*。那有意義嗎? OO – codedge

+0

此外:我將如何再次應用來自Magento核心JS的事件觸發器(請參閱上面的鏈接)? – codedge

+0

這個'$(element).on('change',this,this._configure);'需要在你的'ko.applyBindings(viewModel,document.getElementById(「container」));' –