0

私は JavaScript に Metawidgets を使用しており、変更が加えられた場合は、サーバーにルーティングせずに更新されたドメイン モデルにアクセスして表示したいと考えています (例: すべて同じクライアント側の 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++)、ページはこれを自動的に反映しません。

4

1 に答える 1

1

ここで 2 つの質問をします。個別にお答えします。

  1. Metawidget で値をウィジェットからドメイン オブジェクトに保存するにはどうすればよいですか? これを行うには、コードは次のようになります。

       display: function(x) {
            mw.save();
            console.log(this);
        }
    
  2. Metawidget にウィジェットを新しい値で再描画させるにはどうすればよいですか? これを行うには、コードは次のようになります。

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

ただし、このコードの書き方は少し奇妙だと言わざるを得ません。学習目的の簡単な例であれば問題ありませんが、実稼働コードでは、物事を切り離したいと思うでしょう。

たとえば、通常は.toInspectインラインを定義せず、インラインを直接参照する関数を使用しますmw

于 2015-02-26T21:30:51.867 に答える