插件获取文件路径

1、如何在插件中打开一个文件选择窗口,并获取我所选择文件夹的路径!
2、插件中如何获取到creator项目中assets的路径!(相对路径)

2赞
  1. http://electron.atom.io/docs/api/dialog/#dialogshowopendialogbrowserwindow-options-callback
  2. 可以通过 Editor.projectPath

1、如何在插件中打开一个文件选择窗口,并获取我所选择文件夹的路径!

Editor.Dialog.openFile({
    defaultPath: Editor.projectInfo.path,
    properties: ['openDirectory']
})

这个传入参数的文档要看 electron 的官方文档。
http://electron.atom.io/docs/api/dialog/
接口名字都是对应的,一看就知道哪个接口对应 electron 里面哪个 api 嘞

2、插件中如何获取到creator项目中assets的路径!(相对路径)
这个获取相对路径有些麻烦:Editor.projectInfo.path

var Path = require('path');
var relativePath = Path.relative(__dirname, Path.join(Editor.projectInfo.path, 'assets'));
console.log(relativePath);

Editor.projectInfo.path 就是项目目录,和 assets 拼接一下就是 assets 目录。
然后从当前文件的路径相对到 assets 就用 Path.relative

1赞

我写了个导入插件,直接导入项目的assets文件夹下,但是creator编辑器下的资源目录没有显示(其实导出的文件实在assets文件夹下生成了),感觉好像creator没有自动生成.meta文件!这个是怎么会事!是不是插件生成之后还需要调用什么借口来生成.meta或者是检查有新资源放入assets文件里!

@Q_Q
@nantas

这个是 bug。你是在 core 层使用 assetDB 的接口生成的把?

这部分接口在 core 层暂时有 bug,你可以尝试直接发送事件,在控制台找到 page 层的接口,看看函数里面用的是什么消息,自己发过去就行了。之后会修复的。。。
或者先暂时在 page 层处理一下这个。

没有我是直接fs.writeFile写进去的!

如果你希望资源显示在资源管理器里,那么需要使用 assetdb 的接口去操作 assets。否则出不来。

现在就是想知道用哪个接口去操作
Editor.Ipc.sendToMain(‘asset-db:create-refresh’);
Editor.asset.refresh都要报错!而且不晓得要传什么参数进去

@Q_Q
直接用fs.writeFile写的,调用什么接口让编辑器去识别显示出来!

请使用以下接口来创建或者导入资源(在 page 层调用):

  1. 创建资源:
/**
   * Create asset in specific url by sending string data to it.
   * The created result will be sent through by ipc message `asset-db:assets-created`
   * @method create
   * @param {string} url
   * @param {string} data
   * @param {function} cb
   * @example
   * ```js
   * Editor.assetdb.create( 'db://assets/foo/bar/foobar.js', 'var foobar = 0;');
   * ```
   */
  1. 导入资源:
/**
   * Import files outside asset-db to specific url folder.
   * The import result will be sent through ipc message `asset-db:assets-created`
   * @method import
   * @param {array} rawfiles - Rawfile path list
   * @param {string} destUrl - The url of dest folder, must already existed
   * @param {boolean} showProgress - Show progress or not
   * @param {function} cb - The callback function
   * @example
   * ```js
   * Editor.assetdb.import( [
   *      '/file/to/import/01.png',
   *      '/file/to/import/02.png',
   *      '/file/to/import/03.png',
   * ], 'db://assets/foobar' );
   * ```
   */

1.3.2
Editor.assetdb.create( 'db://assets/foo/bar/foobar.js', 'var foobar = 0;');
这种创建.json文件会报错

Editor.assetdb.import
这种方式相当于先生成出文件,再拷贝到cocoCreator中

我需要的是文件直接生成到cocoCreator中,并且能显示出来

我现在的解决方案是fs.writeFile写到cocoCreator中
然后调用
Editor.assetdb.refresh