Мой виджет, созданный с использованием OpenComponents, не использует клиентскую сторону логики JavaScript

Я пытаюсь создать виджет, используя реагировать и OpenComponents, и когда я пытаюсь использовать свой виджет на стороне клиента, часть реакции корректно загружается, но логика javascript не работает.

Я смотрю на консоль, и у меня нет сообщения об ошибке. Прежде чем использовать реагировать, я пытаюсь с рулем, и у меня есть проблема. Я также пытаюсь использовать его на стороне сервера, он работает отлично.

Это мой index.html

<html>
<head>
    <link rel="stylesheet" href="css/mycss.css">
    <title>Widget</title>
</head>
<body>
<script>
    var oc = {conf: {debug: true}};
</script>
<script src="http://localhost:3030/oc-client/client.js"></script>
<script src="js/header.js"></script>
<script src="js/app.js"></script>
<oc-component href="http://localhost:3030/mywidget"></oc-component>
</body>
</html>

мой компонент

<script src="{{path}}js/app.js" language="JavaScript" type="text/javascript"></script>
<div id="magnet"></div>
<script src="{{path}}js/index.js" language="javascript" type="text/javascript"></script>

мой пакет.json

{
  "name": "mywidget",
  "description": "",
  "version": "1.0.0",
  "repository": "",
  "oc": {
    "files": {
      "data": "server.js",
      "template": {
        "src": "template.html",
        "type": "handlebars"
      },
      "static":["js"]
    }
  }
}

и мой server.js

'use strict';

module.exports.data = function(context, callback){

  callback(null, {
    path:context.staticPath,
    init: {
      to: context.params.to || 7015400,
      from: context.params.from || 8727100,
      depart: context.params.depart || '01/01/1900',
      return: context.params.return || '01/01/1901',
      point_of_sale: context.params.point_of_sale || "XXXXX"
    }
  });
};

Спасибо

1 ответ

Я пытаюсь приложить некоторые усилия здесь: https://github.com/opentable/oc/issues/299

В любом случае (просто, чтобы держать вопрос переполнения стека в актуальном состоянии) - это довольно распространенный сценарий. Хотя список тегов сценариев загружается параллельно в современных браузерах, выполнение, скорее всего, будет происходить в правильном порядке. Итак, A.js будет выполняться первым, B.js - после, а если B зависит от A, у вас все будет хорошо.

На стороне клиента, когда вводят одно и то же в DOM, все может быть немного иначе. Чтобы гарантировать выполнение в правильном порядке, в OC вы можете попробовать следующее:

замещать

<script src="a.js"></script>
<script src="b.js"></script>

С

<script>
  //Following is to guarantee this works if either this is client-side rendered
  // or server-side rendered - so if the oc namespace is available already or not
  window.oc = window.oc || {};
  oc.cmd = oc.cmd || [];

  // Here you require the 2 files in the right order
  oc.cmd.push(function(){
    oc.require('a.js', function(){
      oc.require('b.js', function(){
        console.log('now all should be ok');
      });
    });
  });
</script>

Очевидно, что вы можете использовать любую другую систему загрузки зависимостей в качестве альтернативного подхода, но это, безусловно, должно заставить выполнение на стороне клиента работать так же, как на сервере.

Другие вопросы по тегам