如何将openlayers作为库添加到我的oracle jet项目中?

时间:2017-11-13 16:43:45

标签: openlayers oracle-jet

我使用ojet create,build,serve命令创建了一个oracle jet项目。或者,我也使用NetBeans 8.2 IDE创建了该项目。我无法将开放图层添加为库。我想创建一个由地图组成的Web应用程序。

2 个答案:

答案 0 :(得分:0)

不确定为什么你无法添加库,因为你没有指定如何 你试图添加它,错误是什么,如果有的话。

这就是我要做的事情:

  1. ojet create运行命令npm install --save ol之后。这会在node_modules文件夹中添加库,并将其添加到package.json中。如果您不想将其添加到package.json,请仅使用npm install ol
  2. 导航到脚本文件夹 - >配置文件夹 - > oraclejet-build.js。请参阅注释第37至45行?取消注释这些行并添加自己的库路径,如下所示:

    copyCustomLibsToStaging: {
      fileList: [
       {
         cwd:'node_modules/ol/',
         src: ['*'],
         dest: 'web/js/libs/ol'
       }
      ]
     },
    
  3. 您现在可以使用require模块访问您的库。假设您使用模板创建了一个ojet项目,您可以从'main.js'文件提供对该库的访问。

答案 1 :(得分:0)

我的main.js文件看起来像这样..

/**
 * Copyright (c) 2014, 2017, Oracle and/or its affiliates.
 * The Universal Permissive License (UPL), Version 1.0
 */
'use strict';

/**
 * Example of Require.js boostrap javascript
 */

requirejs.config(
{
  baseUrl: 'js',

  // Path mappings for the logical module names
  // Update the main-release-paths.json for release mode when updating the mappings
  paths:
  //injector:mainReleasePaths
  {
    'knockout': 'libs/knockout/knockout-3.4.0.debug',
    'jquery': 'libs/jquery/jquery-3.1.1',
    'jqueryui-amd': 'libs/jquery/jqueryui-amd-1.12.0',
    'promise': 'libs/es6-promise/es6-promise',
    'hammerjs': 'libs/hammer/hammer-2.0.8',
    'ojdnd': 'libs/dnd-polyfill/dnd-polyfill-1.0.0',
    'ojs': 'libs/oj/v3.2.0/debug',
    'ojL10n': 'libs/oj/v3.2.0/ojL10n',
    'ojtranslations': 'libs/oj/v3.2.0/resources',
    'text': 'libs/require/text',
    'signals': 'libs/js-signals/signals',
    'customElements': 'libs/webcomponents/CustomElements',
    'proj4': 'libs/proj4js/dist/proj4-src',
    'css': 'libs/require-css/css',
  }
  //endinjector
  ,
  // Shim configurations for modules that do not expose AMD
  shim:
  {
    'jquery':
    {
      exports: ['jQuery', '$']
    }
  }
}
);

/**
 * A top-level require call executed by the Application.
 * Although 'ojcore' and 'knockout' would be loaded in any case (they are specified as dependencies
 * by the modules themselves), we are listing them explicitly to get the references to the 'oj' and 'ko'
 * objects in the callback
 */
require(['ojs/ojcore', 'knockout', 'appController', 'ojs/ojknockout',
  'ojs/ojmodule', 'ojs/ojrouter', 'ojs/ojnavigationlist', 'ojs/ojbutton', 'ojs/ojtoolbar','libs/ol'],
  function (oj, ko, app) { // this callback gets executed when all required modules are loaded

    $(function() {

      function init() {
        oj.Router.sync().then(
          function () {
            // Bind your ViewModel for the content of the whole page body.
            ko.applyBindings(app, document.getElementById('globalBody'));
          },
          function (error) {
            oj.Logger.error('Error in root start: ' + error.message);
          }
        );
      }

      // If running in a hybrid (e.g. Cordova) environment, we need to wait for the deviceready 
      // event before executing any code that might interact with Cordova APIs or plugins.
      if ($(document.body).hasClass('oj-hybrid')) {
        document.addEventListener("deviceready", init);
      } else {
        init();
      }

    });

  }
);