0

私は、JavaScript オブジェクトの操作のニュアンスを真に学んでいる途中で、思わぬ障害に遭遇しました。

DOM とモデルをセグメント化するための「名前空間化された」オブジェクトのセットがあります。以下はコードです:

function Sandbox2(){
this.page = {
      FirstName: document.getElementById("FirstName")
    , LastName: document.getElementById("LastName")
    , Email: document.getElementById("Email")
};

this.model = {
      FirstName: "James"
    , LastName: "Eggers"
    , Email: "James.R.Eggers@gmail.com"
};

this.behavior = {};

this.bindPageToModel = function(){
    for(var property in this.page){
        if (property){
            property.value = this.model[property];
        }
    }
};

    this.bindModelToPage = function(){
    for(var property in this.model){
        if (property){
            this.model[property].value = this.page[property];
        }
    }
};
};

JsTestDriver を使用して、いくつかのテストを行って、ページ オブジェクトとモデル オブジェクトのいくつかを試してみました。具体的なテストは次のとおりです。

"test ModelBinding should be allowed." : function(){
        var sandbox2 = new Sandbox2();
        var page = sandbox2.page;
        page.FirstName = "Test";
        page.LastName = "Account";
        sandbox2.bindModelToProperty();

        assertEquals("Ensure the new values took.", page.FirstName, sandbox2.page.FirstName);
        assertEquals("New Page values should be in the model.", "Test", sandbox2.model.FirstName);
    }

上記のテストでは、最初にassertEqualsパスします。ただし、2 番目のテストはsandbox2.model.FirstName"James" (初期値) に解決されます。

pageオブジェクトの値をオブジェクトにマップできるようにコード (オリジナルまたはテスト) を変更する方法について、誰にも推奨事項はありmodelますか?

4

1 に答える 1

2

問題はここにあるようです:

for(var property in this.page){
    if (property){
        property.value = this.model[property];
    }
}

変数は、property実際にはオブジェクトのキー値です (FirstName、LastName、および Email)。value結果なしでこれらの文字列オブジェクトの属性を設定しています。

次のようなことをするつもりだったと思います:

this.page[property].value = this.model[property];
于 2011-06-09T17:55:10.403 に答える