DukeScript:如何从 JavaScript 上下文访问 Java 模型?

DukeScript: how to access the Java model from the JavaScript context?

这与 and 有关。

我已经阅读了优秀的文档 "Using the Knockout API"。 这解释了上下文是如何设置具有敲除绑定的特定小部件的。

现在我希望能够从 Firebug 命令行访问 Java 模型,就像我通常在使用 KnockoutJS 在 Java 脚本中访问 ViewModel 时所做的那样在浏览器中。 Firebug 不知道“$root”,基本上我不知道如何访问 Java 模型并调用 @Function 方法,也不知道是否有可能。 这将是一个很酷的 REPL。

成功!!!

这是诀窍,我创建了一个自定义绑定。在自定义绑定 init() 方法中,传递了 viewModel。然后我将模型保存到 JavaScript 变量中。

第 1 步:自定义绑定定义

  @net.java.html.js.JavaScriptBody(
      args = {},  body = 
        "ko.bindingHandlers.Model = {" +
            "init: function( element, valueAccessor, allBindingsAccessor, viewModel ){" +
            "Model = viewModel;" +
            "}" +
        "};"
  )
  public static native void registerModel();

第 2 步:使用此数据绑定在页面中声明一个 div:

<div data-bind="Model"></div>

第三步:在main,onPageLoad()中注册自定义绑定:

    MyResource.registerModel();
    MyResource.loadFirebug();
    d.applyBindings();

第 4 步:从 Firebug 控制台(模型....)访问您的模型可观察对象和方法

也许有一种更优雅的方法可以直接对 Firebug div 进行数据绑定,但我没有成功,可能是因为 Firebug 是异步加载的,在 applyBindings( ) 叫做。

ko.dataFor and ko.contextFor 可能更容易使用 Model = ko.dataFor(document.body);