DukeScript: как получить доступ к модели Java из контекста JavaScript?
Я прочитал отличную документацию "Использование 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().