web-dev-qa-db-ja.com

単純なVueJsコンポーネントにInternetExplorer 10のサポートを追加するにはどうすればよいですか?

構築している単純なVueJsコンポーネントがあり、IE 10ではまったくレンダリングされません。

背景:Vueコンポーネントは、基本的なフィルタリングと並べ替えをサポートする会社のイベントのリストです。残念ながら、IE10をサポートする必要があります。私はbabelを使用していませんが、この問題のトラブルシューティングに使用しようとしました-効果はありませんでした

私が得ているエラーは'city' is undefined。 IE10は、この問題が発生している唯一のブラウザーです。

これがCodePenです 関連するコードだけです。何が起こっているのかを明確にするためにコメントを追加しました。これがJSだけです(完全なコードとより良いコンテキストについてはCodePenを参照してください):

/* Server rendered data */

var events = [{
        path: "events/residuals-biosolids",
        name: "Residuals & Biosolids Conference",
        sortDate: "1536165900000",
        startDate: "4 September 2018",
        endDate: "5 October 2018",
        displayDate: "September 4 - October 5, 2018",
        state: "WI",
        city: "Milwaukee",
        booth: "342",
        featuredImg: "https://cdn2.hubspot.net/hubfs/4299619/event%20thumb.png"
      }, {
        path: "events/bio-expo",
        name: "Biosolid Expo",
        sortDate: "1548979200000",
        startDate: "6 February 2019",
        endDate: "5 March 2019",
        displayDate: "February 6 - March 5, 2019",
        state: "MN",
        city: "Eagan",
        booth: "12",
        featuredImg: ""
      }, {
        path: "events/world-ag-expo",
        name: "World AG Expo",
        sortDate: "1549670400000",
        startDate: "7 February 2019",
        endDate: "2 February 2019",
        displayDate: "February 7 -  2, 2019",
        state: "CA",
        city: "Tulare",
        booth: "3815",
        featuredImg: ""
      }];
      var eventsDesc = [{
        path: "world-ag-expo",
        name: "World AG Expo",
        sortDate: "1549670400000",
        startDate: "7 February 2019",
        endDate: "2 February 2019",
        displayDate: "February 7 -  2, 2019",
        state: "CA",
        city: "Tulare",
        booth: "3815",
        featuredImg: ""
      }, {
        path: "bio-expo",
        name: "Biosolid Expo",
        sortDate: "1548979200000",
        startDate: "6 February 2019",
        endDate: "5 March 2019",
        displayDate: "February 6 - March 5, 2019",
        state: "MN",
        city: "Eagan",
        booth: "12",
        featuredImg: ""
      }, {
        path: "residuals-biosolids",
        name: "Residuals & Biosolids Conference",
        sortDate: "1536165900000",
        startDate: "4 September 2018",
        endDate: "5 October 2018",
        displayDate: "September 4 - October 5, 2018",
        state: "WI",
        city: "Milwaukee",
        booth: "342",
        featuredImg: "https://cdn2.hubspot.net/hub/4299619/hubfs/event%20thumb.png?width=760&name=event%20thumb.png"
      }];
      var selectedStates = ["CA", "MN", "WI", ];
      var selectedCities = ["Eagan", "Milwaukee", "Tulare", ];

      /*

      Vue code below

      */
      var app = new Vue({
       el: "#sg-events-wrapper",
       data: {
          message: "Hello Vue!",
          dateOrder: "ascending",
          selectedCity:"none",
          selectedState:"none",
    /*the data below is pulled from the script tag in the page.*/
          eventCities:selectedCities,
          eventStates:selectedStates,
          eventList: events,
          eventListDesc:eventsDesc,
       },
       computed: {
          eventsSorted:function(){
            /*chooses which server generated list to use for rendering events*/
             if(this.dateOrder=="ascending"){
                return this.eventList;
             }
             else{
                return this.eventListDesc; 
             }
          },

       },
       methods:{
         /*handles the visual filtering when someone sets city and or state*/
          isInStateAndCity:function(eventsCity,eventsState){
             var citiesMatch;
             var statesMatch;
             if(eventsCity == this.selectedCity || this.selectedCity=="none"){
                citiesMatch = true;
             }else{
                citiesMatch = false;
             }
             if(eventsState == this.selectedState ||this.selectedState=="none"){
                statesMatch = true;
             }else{
                statesMatch = false;
             }
             if(citiesMatch && statesMatch){
                return true;
             }else{
                return false;
             }

          }

       }
    });

私が試したトラブルシューティング手順:

  • 私のコードはもともとそのように書かれていませんが、babelを使用しました。
  • 私はbabel-polyfillを使用しました-効果がないようでした。
  • 本文のscriptタグにあるjsをメインのJSファイルに配置して、HTMLのコードの前に何らかの理由でjsファイルの読み込みに問題がないかどうかを確認しました。効果はありませんでした。

私が考えていることが問題を引き起こしている可能性があります:IE10は、私が行っているようにオブジェクトにプロパティ値を割り当てることを好みません。これは確かではありません。それは単なる推測であり、私はそれを行う別の方法を考えることはできません。

IE 10コンソールエラーとCodePenでのレンダリングの失敗のスクリーンショット-それが役立つ場合。

アイデアはあるがテストする方法がない場合:変更をテストし、エラーが発生した場合は、表示された内容とコンソールの記録を送り返すことができます。

5
TheWebTech

他の人もこの問題に遭遇する可能性が高く、そこには多くの情報がないため、自分で回答を投稿してください。

2つの問題がありました。私のselectedCitiesおよびselectedStates配列には、末尾にコンマがありました。新しいブラウザはそれを気にしませんが、<= IE10は気にします。

さらに、VueJSの問題があります。誰かがVue JSを更新して、IE 10以下が理解できない新しい正規表現文字列を使用するようにしました。修正は、古いバージョンのVueJSを使用するか、置き換えることです。正規表現。この情報を見つけたソースの説明:

https://github.com/vuejs/vue/issues/7946#issuecomment-393713941

助けてくれた皆さん、ありがとうございました。

PeteEmersonとKevinLeonard(HubSpot Dev Slackを介して私を助け、根本的な問題を見つけてくれた)に特に感謝します!

0
TheWebTech