在淘汰js中更改Javascript对象值

时间:2014-05-15 11:17:53

标签: javascript knockout.js

我有一个数据变量,其格式为嵌套数据结构

   var args = JSON.stringify({ argBO: jQuery.parseJSON(ko.toJSON(self.StateModel)) });

看起来像:

  {"argBO":
    { "StateId":0, 
    "StateName":"jjhj",
    "ShortName":"jjj",
    "IsActive":true,
    "CountryId":8,
    "errors":[],
    "CountryName":"Antigua and Barbud"
       }
  }

如果尝试从上面获取StateName参数值,请执行以下操作:

  console.log(ko.utils.parseJson(args).argBO.StateName); 

正确打印“jjhj”

但是,如果我尝试通过执行以下操作为其分配新值:

  ko.utils.parseJson(args).argBO.StateName= 'RAjmsd'

StateName没有更改为新的..为什么????

更新

var stateModel = {
        StateId: ko.observable(0),
        StateName: ko.observable('').extend({ required: true }),
        ShortName: ko.observable('').extend({ required: true }),
        IsActive: ko.observable(true),
        CountryId: ko.observable().extend({ required: true })

    }

1 个答案:

答案 0 :(得分:0)

第二个语句创建一个新对象,然后更改该新对象的StateName属性,但之后您不对该对象执行任何操作。

ko.utils.parseJson(args)

该代码通过解析JSON字符串来创建一个全新的对象。它与原始对象无关。

您可能会在查看代码时引用self.StateModel(尽管显示完整的视图模型会有所帮助),因此您应该直接通过以下方式更改StateName:

self.StateName('RAjmsd');