2016-06-24 2 views
0

開発中に複製できないJavaScriptエラーが発生しています。これは問題のモジュールです。ビッグコマースのステンシルバンドルで、JavaScriptをマイナー化しない

import $ from 'jquery'; 
import 'foundation-sites/js/foundation.core'; 
import 'foundation-sites/js/foundation.util.mediaQuery'; 
import 'foundation-sites/js/foundation.util.keyboard'; 
import 'foundation-sites/js/foundation.util.box'; 
import 'foundation-sites/js/foundation.util.motion'; 
import 'foundation-sites/js/foundation.util.triggers'; 
import 'foundation-sites/js/foundation.dropdown'; 

export default function() { 
    $(window).on('changed.zf.mediaquery', function(event, newSize, oldSize){ 
    toggle(); 
    }); 

    // toggle on page load 
    toggle(); 
} 

function toggle() { 
    const $drop = $('[data-more-categories-dropdown]'); 

    if (Foundation.MediaQuery.atLeast('medium')) { 
    if ($drop.data('dropdown')) { 
     $drop.foundation('destroy'); 
     $drop.removeData('dropdown'); 
     $drop.attr('style', ''); 
    } 
    } 
    else { 
    if (!$drop.data('dropdown')) { 
     new Foundation.Dropdown($drop, { 
     closeOnClick: true 
     }); 
    } 
    } 
} 

モジュールの目的は、画面ブレークポイントが変更されたときに基本ドロップダウンメニューを破棄することです。新しいブレークポイントが中またはそれ以上で、ドロップダウンが存在する場合は、それを破棄します。ブレークポイントがmediumより小さく、ドロップダウンが存在しない場合は作成します。

これは、ローカル開発版のストアでも同じように機能します。次に、「ステンシルバンドル」を実行し、ライブストアにテーマをアップロードします。私がそれをすると、ブラウザを中程度以上のブレークポイントにリサイズするたびにエラーが発生します。エラーは次のとおりです。

bundle.js:4 Uncaught ReferenceError: We're sorry, 'destroy' is not an available method for this element. 

これはjavascriptのすべてがbundle.jsファイルに縮小され、そして、私が開発に問題を再現することはできませんので、トラブルシューティングすることは非常に困難です。

stencil bundleに開発中のようにジャバスクリプトを扱うよう指示する方法はありますか(ハッキリでも)。そのようにすれば、コードにdebugger文を残して、ソースマップを使用して、その動作が本番環境で異なる理由を理解する手助けをすることができます。

これを引き起こす可能性のある他のアイデアがあれば、教えてください。

+0

基礎ライブラリを小さくしている可能性があり、変数/関数名を駄目にしているのかもしれません。たぶんそれを個別に縮小版を含めてみてください。 – user3413723

+0

ありがとう@ user3413723。あなたは正しいです、私は基礎図書館を細分化しています。基礎ライブラリはES6から翻訳する必要があるため、webpackの設定に含まれています。あなたはそれが問題を引き起こしていると思いますか?もっと説明できますか?私はまだ少し失われています。 – flyingL123

+0

まあ私は時々関数と変数の名前が変更されていることを知っています。おそらく、財団を縮小している過程で、小分類業者は「破壊」機能の名称をより短いものに変更したのかもしれない。だから多分基盤ウェブサイトを閲覧し、そこでミニバージョンを見つけてそれをダウンロードし、それをあなたのページに入れてからあなたのバージョンを削除してください。彼らは確かに彼らの縮小バージョンをテストして、それが動作することを確認するでしょう。それが機能すれば - あなたはあなたの問題を見つけました。もしそうでなければ、それは責任を負わせることではない。 – user3413723

答えて

1

私は理由は分かりませんが、私はモジュールに少し変更を加えましたが、問題を修正したようです。私は現在、zfPluginデータ属性を使用して、ドロップダウンが開始されているかどうかを確認しています。新しいtoggle関数があります。

function toggle() { 
    const $drop = $('[data-more-categories-dropdown]'); 

    if (Foundation.MediaQuery.atLeast('medium')) { 
    if ($drop.data('zfPlugin')) { 
     $drop.foundation('destroy'); 
     $drop.attr('style', ''); 
    } 
    } 
    else { 
    if (!$drop.data('zfPlugin')) { 
     new Foundation.Dropdown($drop, { 
     closeOnClick: true 
     }); 
    } 
    } 
} 
関連する問題