簡體   English   中英

我們如何在腳本標簽中正確使用聚合物屬性?

[英]How do we properly use a polymer property in a script tag?

在基於與socket.io的連接之上構建的Web組件上工作,但是我們希望用戶能夠從服務器鏈接到他們自己的socket.io版本。 使用以下腳本:

<script src$="{{socketIp}}/socket.io/socket.io.js"></script>

定義了socketIp ,頁面可以很好地加載它。 一個示例是“ http:// localhost:8080

使用src=將給出404並在網址中打印出“ {”。 使用src$=似乎是正確的處理方式,因為它可以成功加載鏈接。

然后在附件上引用io但會導致Uncaught ReferenceError: io is not defined

直接輸入鏈接可以正常工作,但用作變量時不起作用。 我們還嘗試使用超時,以防尚未加載而又無法正常工作的問題。

有什么建議么?

使用on-load="METHOD"綁定到<script>的load事件,其中METHOD是您的Polymer對象上METHOD的名稱。 應該在該回調方法中定義socket.io

此示例將onScriptLoad()onScriptError()綁定為<script>on-loadon-error回調:

<dom-module id="x-foo">
  <template>
    <script src$="{{src}}"
            on-load="onScriptLoad"
            on-error="onScriptError"></script>
  </template>
  <script>
    Polymer({
      is: 'x-foo',
      onScriptLoad: function() {
        console.log('script loaded');
      },
      onScriptError: function(e) {
        console.log('script err:', e);
      }
    });
  </script>
</dom-module>

 <head> <base href="https://polygit.org/polymer+:master/components/"> <script src="webcomponentsjs/webcomponents-lite.min.js"></script> <link rel="import" href="polymer/polymer.html"> </head> <body> <x-foo src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.6/socket.io.min.js"></x-foo> <dom-module id="x-foo"> <template> <script src$="{{src}}" on-load="onScriptLoad" on-error="onScriptError"></script> </template> <script> Polymer({ is: 'x-foo', onScriptLoad: function() { console.log('socket.io:script loaded'); var socket = io.connect('http://localhost'); socket.on('connect', function(e) { console.log('socket.io:connected:', e); }) .on('connect_error', function(e) { console.log('socket.io:connection error:', e.message); }) .on('news', function(data) { console.log('socket.io:news:', data); }); }, onScriptError: function(e) { console.log('socket.io:script err:', e); } }); </script> </dom-module> </body> 

jsbin

只需強制性地加載腳本:

var e = document.createElement('script');
e.src = ip + '/socket.io/socket.io.js';
e.async = true;
document.body.appendChild(e);
e.onload = function() {
  // work with socket.io
};

暫無
暫無

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

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