0

我有两个需要相互通信的插件。其中一个插件允许用户创建锻炼。另一个插件需要能够允许用户将锻炼插件链接到特定的锻炼。

为此,最好能够进入消费插件,单击“链接锻炼”之类的内容,然后通过 buildfire.navigation.navigateTo 将我带到锻炼插件,我可以在其中选择锻炼(因为只有这个插件可以访问锻炼数据)。从那里,一旦做出选择,它会将我导航回另一个插件,其中包含我链接的锻炼记录的 ID。这样,我可以保存锻炼的 ID,并且每当有人想从小部件中查看锻炼时,它就能够将他们导航到锻炼插件并加载正确的 ID。

当我尝试在控制面板中实现此功能时,navigation.navigateTo 会出现以下错误消息:

postMessageHandler error: TypeError: Cannot read property 'source' of undefined
at Object.navigateTo (pluginAPI.js:265)
at PluginAPI.postMessageHandler (pluginAPI.js:221)
at tryPMH (postMaster.js:44)
at Object._acceptRequest (postMaster.js:62)
at postMessageHandler (postMaster.js:29)

navigation.navigateTo 只能在小部件端使用吗?这是我的导航对象供参考:

        pluginId: '6d9d8456-d2c9-4ddb-80b8-**********',
        instanceId: '6drt3456-d2c9-4ddb-80b8-fdbbff854r1b-*********',
        folderName: 'theplugin',
        title: '',
        queryString: '?id=abc123def456'

另外,我不确定文件夹名称应该是什么。SDK源代码似乎需要它,但我不知道应该放什么。我放了一些我认为可能有用的东西,但这可能是为什么这不起作用的罪魁祸首。寻求对此的确认。

尽管如此,即使我使用小部件中的导航,当它加载新插件和新加载插件的管理面板时,它也会显示“404 not found”而不是加载管理面板。对此也有任何想法吗?

4

1 回答 1

1

如果您希望控件触发小部件上的导航,则需要使用消息传递。请参见下面的示例。

在控件上:

buildfire.messaging.sendMessageToWidget({
                    name: 'OPEN_PLUGIN',
                    message: {
                        data: pluginData
                    }
                });

在小部件上:

    buildfire.messaging.onReceivedMessage = function(message){
       var plugin = event.message.data;
       switch (message.section){
        case 'OPEN_PLUGIN':
            if (plugin && plugin.pluginType && plugin.pluginType.folderName)
                    fName = plugin.pluginType.folderName;
                else if (plugin && plugin.folderName)
                    fName = plugin.folderName;

                buildfire.navigation.navigateTo({
                    pluginId: plugin.pluginId,
                    instanceId: plugin.instanceId,
                    title: plugin.title,
                    folderName: fName
                });
        break;
    }
}

就文件夹名称而言,有多种获取方式。一种简单的方法是在控制面板中编辑插件实例。URL 如下所示:

/pluginControl/ba4139dd-09c6-4121-aa4a-c72570af07fc/ba4139dd-09c6-4121-aa4a-c72570af07fc-**********/Home/52/

这将转换以下格式:

/pluginControl/pluginId/pluginInstanceId/title/folderName

所以在这个例子中,文件夹名称是 52。

于 2017-12-12T23:55:24.850 回答