Как получить и показать обновленную модель домена в мета-виджетах (JavaScript) в клиенте?

Я использую метавиджеты для javascript и хочу получить доступ и показать обновленную модель домена, если в нее были внесены какие-либо изменения, без маршрутизации обратно на сервер (например, все в одном и том же клиентском javascript). К сожалению, каждый пример, который я смог найти, возвращался на сервер или включался в фреймворк.

Вот пример, показывающий мою проблему с получением обновленной модели. Измените значения на странице, нажмите "Показать" и откройте окно консоли. Обратите внимание, как он все еще показывает старые значения.

<!DOCTYPE html>
<html>
<head>
   <script src="metawidget-4.1/js/lib/metawidget/core/metawidget-core.min.js" type="text/javascript"></script>
 </head>
 <body style="font-family:Arial">
    <div id="metawidget"></div>
    <script type="text/javascript">
        var mw = new metawidget.Metawidget( document.getElementById( 'metawidget' ) );
        mw.toInspect = {
            name: 'X',
            age: 40,
            display: function(x) {
                // This never shows the updated model if the user changes values
                console.log(this);
            }
        };
        mw.buildWidgets();
    </script>
</body>
</html>

Как я могу заставить Metawidget автоматически отображать обновленную версию объекта домена, если он изменен из кода? Например, если бы мне пришлось увеличивать возраст (например, person.age++ или this.age++ изнутри дисплея), страница автоматически не отражает это.

1 ответ

Решение

Вы задаете два вопроса здесь. Я отвечу на них отдельно.

  1. Как мне получить Metawidget для сохранения значений обратно из виджетов в объект домена? Для этого ваш код должен выглядеть так:

       display: function(x) {
            mw.save();
            console.log(this);
        }
    
  2. Как заставить Metawidget перерисовать виджеты с новыми значениями? Для этого ваш код должен выглядеть так:

       display: function(x) {
            this.age++;
            mw.buildWidgets();
        }
    

Однако я должен сказать, что то, как вы написали этот код, немного странно. Хорошо, если это всего лишь быстрый пример для целей обучения, но в рабочем коде вы бы хотели отделить вещи.

Например, вы обычно не определяете .toInspect встроенные и имеют функции, которые непосредственно ссылаются на mw,

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