我有两个需要相互通信的插件。其中一个插件允许用户创建锻炼。另一个插件需要能够允许用户链接到锻炼插件到特定的锻炼。
要做到这一点,最好能够进入消费插件,点击“链接锻炼”之类的东西,让它通过buildfire.navigation.navigateTo带到锻炼插件,在那里我可以选择一个锻炼(因为锻炼数据只能由此插件访问)。从那里,一旦做出选择,它将导航我回到另一个插件,其中包含我链接的锻炼记录的id。通过这种方式,我可以保存锻炼的ID,并且每当有人想要从窗口小部件中查看锻炼时,它就能够将它们导航到锻炼插件并加载正确的ID。
当我在控制面板中尝试实现此功能时,导航.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)
导航.navigateTo只能在小部件方面使用吗?这是我的导航对象供参考:
pluginId: '6d9d8456-d2c9-4ddb-80b8-**********',
instanceId: '6drt3456-d2c9-4ddb-80b8-fdbbff854r1b-*********',
folderName: 'theplugin',
title: '',
queryString: '?id=abc123def456'
另外,我不确定folderName应该是什么。看起来它是从SDK源代码中需要的,但我无法弄清楚我应该放在那里。我把一些我认为可能有用的东西放在了它上面,但它可能是为什么它不起作用的罪魁祸首。寻求确认。
尽管如此,即使我使用Widget中的导航,当它为新加载的插件加载新插件和管理面板时,显示“404 not found”而不是加载管理面板。对此也有任何想法吗?
答案 0 :(得分:1)
如果您希望控件触发窗口小部件上的导航,则需要使用messaging。请参阅下面的示例。
在控件上:
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将如下所示:
转换为以下格式:
因此,在此示例中,文件夹名称为52。