如何在客户端的 Metawidgets (JavaScript) 中获取和显示更新的域模型?

How to Get and Show Updated Domain Model in Metawidgets (JavaScript) within the Client?

我正在为 javascript 使用 Metawidgets,如果对其进行了任何更改,我想访问并显示更新的域模型,而无需路由回服务器(例如:所有内容都在同一客户端中javascript)。可悲的是,我能找到的每个示例都返回到服务器或插入到框架中。

这是一个显示我在获取更新模型时遇到的问题的示例。更改页面上的值,单击 'display' 并查看控制台 window。请注意它如何仍然显示旧值。

<!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. 如何让 Metawidget 将值从小部件保存回域对象?为此,您的代码应如下所示:

       display: function(x) {
            mw.save();
            console.log(this);
        }
    
  2. 如何让 Metawidget 使用新值重绘小部件?为此,您的代码应如下所示:

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

不过,我得说你写这段代码的方式有点奇怪。如果它只是一个用于学习目的的快速示例,那很好,但在生产代码中,您可能希望解耦。

例如,您通常不会定义 .toInspect 内联,并在其上包含直接引用 mw.

的函数