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通过;但是,第二个测试解析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 回答