簡體   English   中英

使用Polymer的core-ajax加載所有json文件后的Execute方法

[英]Execute method after all json files are loaded using Polymer's core-ajax

在所有json文件都將加載后,我需要執行callMe()方法。 我正在使用Polymer的core-ajax加載json文件。 我的代碼:

<polymer-element name="my-schedule" attributes="speakersUrl sessionsUrl scheduleUrl">
    <template>
        <core-ajax auto url="{{scheduleUrl}}" handleAs="json" on-core-response="{{scheduleResponse}}"></core-ajax>
        <core-ajax auto url="{{sessionsUrl}}" handleAs="json" on-core-response="{{sessionsResponse}}"></core-ajax>
        <core-ajax auto url="{{speakersUrl}}" handleAs="json" on-core-response="{{speakersResponse}}"></core-ajax>
            </template>
        </div>
    </template>
    <script>
    (function() {
        Polymer('my-schedule', {
            speakersUrl: '../../data/speakers.json',
            sessionsUrl: '../../data/sessions.json',
            scheduleUrl: '../../data/schedule.json',
            speakersResponse: function(event, response) {
                this.speakers = response.response;
            },
            sessionsResponse: function(event, response) {
                this.sessions = response.response;
            },
            scheduleResponse: function(event, response) {
                this.schedule = response.response;
            },
            callMe: function() {
                console.log('I was called after all json files loaded');
            }
        });
    })();
    </script>

誰可以幫助我呢? 注意:沒有jQuery。

這應該可以解決問題。 通過使用observe您可以在每次更改值時檢查它們的值,並等待所有三個值出現。 您也可以直接綁定到core-ajaxresponse屬性,而不必進行設置器。

<polymer-element name="my-schedule" attributes="speakersUrl sessionsUrl scheduleUrl">
    <template>
        <core-ajax auto url="{{scheduleUrl}}" handleAs="json" response="{{speakers}}"></core-ajax>
        <core-ajax auto url="{{sessionsUrl}}" handleAs="json" response="{{sessions}}"></core-ajax>
        <core-ajax auto url="{{speakersUrl}}" handleAs="json" response="{{schedule}}"></core-ajax>
    </template>
    <script>
    (function() {
        Polymer('my-schedule', {
            speakersUrl: '../../data/speakers.json',
            sessionsUrl: '../../data/sessions.json',
            scheduleUrl: '../../data/schedule.json',
            observe: {
              'speakers schedule sessions': 'checkReady'  
            },
            checkReady: function() {
              if (this.sessions && this.speakers && this.schedule) { this.callMe(); }
            },
            callMe: function() {
                console.log('I was called after all json files loaded');
            }
        });
    })();
    </script>
</polymer-element>

有兩種方法:

  1. 檢查數據何時准備就緒->調用custom_element,其中在ready()回調中調用callMe()。

      <my-template if="{{data_json.list}}"> <my-custom_element pass_data ='{{data_json.list}}' ></my-custom_element></template> 

相似: 聚合物,如何在渲染其他元素之前等待core-ajax完成?

  1. 另一種是在scheduleResponse()中調用callMe();

我想我要在這里做3個true / false變量,並在每次加載后將加載項的狀態設置為true並檢查其他項的狀態。 要阻止它觸發更多操作,則可以再使用1個變量來檢查方法是否已運行。

  <polymer-element name="my-schedule" attributes="speakersUrl sessionsUrl scheduleUrl">
    <template>
        <core-ajax auto url="{{scheduleUrl}}" handleAs="json" on-core-response="{{scheduleResponse}}"></core-ajax>
        <core-ajax auto url="{{sessionsUrl}}" handleAs="json" on-core-response="{{sessionsResponse}}"></core-ajax>
        <core-ajax auto url="{{speakersUrl}}" handleAs="json" on-core-response="{{speakersResponse}}"></core-ajax>
    </template>
    <script>
    (function() {
        Polymer('my-schedule', {
            speakersUrl: '../../data/speakers.json',
            speakerStatus: false,
            sessionsUrl: '../../data/sessions.json',
            sessionStatus: false,
            scheduleUrl: '../../data/schedule.json',
            scheduleStatus: false,
            hasRun: false,
            speakersResponse: function(event, response) {
                this.speakers = response.response;
                this.speakerStatus = true;
                this.checkStatus();
            },
            sessionsResponse: function(event, response) {
                this.sessions = response.response;
                this.sessionStatus = true;
                this.checkStatus();
            },
            scheduleResponse: function(event, response) {
                this.schedule = response.response;
                this.scheduleStatus = true;
                this.checkStatus();
            },
            checkStatus: function () {
              if (this.speakerStatus && this.sessionStatus && this.scheduleStatus && !this.hasRun) {
                this.callMe();
                this.hasRun = true;
              }
            },
            callMe: function() {
                console.log('I was called after all json files loaded');
            }
        });
    })();
    </script>
  </polymer-element>

您可以在core-ajax元素上使用on-core-complete事件來檢查JSON何時加載。 EG <core-ajax auto url="{{scheduleUrl}}" handleAs="json" on-core-complete="{{scheduleResponse}}"></core-ajax>

了解更多: https//www.polymer-project.org/0.5/docs/elements/core-ajax.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM