0

次のようなモジュールがあります。

define([ 'jquery' ], function($) {
    'use strict';

    return {
        email: $('#email').val() //$('#email') is a html input box
    };
});

実行時にこのモジュールを必要とするページから

var Form= require('src/form');
Form.email;

正しい値が取得されますが、新しい電子メール アドレスを入力すると、元の値が取得され続け、更新されません。

次のように変更すると、機能します。

define([ 'jquery' ], function($) {
    'use strict';

    return {
        email: $('#email');
    };
});

...

var Form= require('src/form');
Form.email.val();

RequireJs は、返されたオブジェクトを 1 回しか評価していないように思えます。ここで何が起こっているか知っている人はいますか?

4

3 に答える 3

0

フォーム モジュールは$('#email')、モジュールがロードされた時点でのみ値を返します。変数に設定$('#email').val()すると、要素の値への参照ではなく、値によって格納されます。

更新を保持し$('#email')、jQuery セレクターをキャッシュするものを返す必要があります。これにより、検索するたびにその値を見つけることができます。

jQuery セレクターの公開を避けるには、クロージャーによるカプセル化を使用し、モジュール内に getter メソッドを作成します。

 define([ 'jquery' ], function($) {
   'use strict';
   var $email = $('#email');

   return {
     getEmail: function() {
       return $email.val();
     }
   }
 });

そしてForm.getEmail()、値を取得するために使用します

于 2013-09-02T05:38:46.223 に答える