7

在我的 Google Wave 小工具中尝试调用 wave.getState() 时,我返回 null(无状态对象)。如何初始化 Wave 状态对象?我在 Wave Sandbox 中工作。

我的 ModulePrefs 包含以下内容:

    <Require feature="wave" />
    <Require feature="rpc"/>

在搜索修复程序时,我从一些谷歌群组帖子中获得了“rpc”功能,但这似乎没有任何帮助。

该小工具包含一个 jQuery 插件,它定义了我使用的类(未显示),将一个事件处理程序附加到在编辑模式下显示的链接,并使用 google wave 小工具初始化程序设置回调方法:

$.fn.extend({
     $.gork.InitPass.newButtonClick = function newButtonClick() {
           var jer = new $.gork.InitPass.Player('Jeremias', 12, 2);
           var delta = {};
           delta[jer.name] = jer.serialize();
           wave.getState().submitDelta(delta);
     };

    $.gork.InitPass.modeCallback = function modeCallback() {
           var state = wave.getState();
           var mode = wave.getMode();
           $.gork.InitPass.getContainer().ipCombatState(state, (mode == wave.Mode.EDIT));
    };

    $.gork.InitPass.stateCallback = function stateCallback() {
      $.gork.InitPass.getContainer().ipCombatState(
      wave.getState(), (wave.getMode() == wave.Mode.EDIT));
      alert('state');
    };

    $.gork.InitPass.init = function init() {
     if (wave && wave.isInWaveContainer()) {
       var mode = wave.getMode();
       $('.gork-ip-container').ipCombatState(null, (mode == wave.Mode.EDIT));

       wave.setModeCallback($.gork.InitPass.modeCallback);
       wave.setStateCallback($.gork.InitPass.stateCallback);
     }
    };
})(jQuery);
gadgets.util.registerOnLoadHandler($.gork.InitPass.init);

 $(function ready() {
  $.gork.InitPass.getContainer().find('.gork-ip-edit .addSection a.newButton').click(
   $.gork.InitPass.newButtonClick);
 });

所以这里有两个主要的功能:

  • 当模式改变时,会调用 ipCombatState(...)。当用户将小工具置于编辑模式 (CTRL+E) 时,这会通过隐藏视图 DIV 并显示编辑 DIV 来更改小工具的视觉外观。
  • newButtonClick 回调(附加到编辑容器中的链接“a.newButton”)应该将 Jeremias(Nate 的 Shadowrun 角色)添加到小工具状态,以便他将在编辑模式下显示为表格行。

我已经验证调用了初始化方法,并且查看/编辑模式开关工作正常(状态为空除外)。当我单击新按钮链接(编辑模式下底部的链接)并触发 newButtonClick 处理程序时,我收到错误,因为 wave.getState() 也返回 null。

如何初始化波状态以便我可以使用它?

我的小工具的目的是跟踪 Shadowrun 桌面游戏(第 4 版)中的战斗主动顺序。你可以在 Wave 中测试它,看看我到目前为止有什么:

http://gorkwobble.herobo.com/wave/init-pass.xml

实际的 javascript 代码被外部化为:

http://gorkwobble.herobo.com/wave/init-pass.js

PS 如果有 Shadowrun 玩家读到了这篇文章,并且想在我让小工具工作时听到它,请发表评论,我会向你挥手。

4

0 回答 0