DukeScript: как получить доступ к модели Java из контекста JavaScript?

Это связано с 1 и 2.

Я прочитал отличную документацию "Использование Knockout API". Это объясняет, как задан контекст определенного виджета с привязками нокаута.

Теперь я хотел бы иметь возможность доступа к моделям Java из командной строки Firebug, как обычно, когда я получаю доступ к ViewModel в Javascript, используя KnockoutJS в браузере. Firebug не знает о "$root", в основном я не знаю, как вообще возможно и вообще ли вообще получить доступ к модели Java и вызвать методы @Function. Это сделало бы для прохладного REPL.

2 ответа

Решение

Есть ko.dataFor и ko.contextFor, и может быть проще использоватьModel = ko.dataFor(document.body);

Sucess!!!

Вот хитрость, я создал пользовательскую привязку. В пользовательском методе привязки 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>

Шаг 3: зарегистрируйте пользовательскую привязку в main,onPageLoad():

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

Шаг 4: доступ к наблюдаемым моделям и методам модели из консоли Firebug (Модель....)

Возможно, есть более элегантный способ привязки данных к файлу Firebug напрямую, но мне это не удалось, возможно, потому что Firebug загружается асинхронно, после вызова applyBindings().

Другие вопросы по тегам