2012-04-09 58 views
0

我正在使用backbone.js创建应用程序。我有代码JS代码如下,Javascript Object literal assignment

window.RequestsView = Backbone.View.extend({ 

initialize:function (input) { 

    console.log('input ' + JSON.stringify(input)); 

    this.variables = { request_id:input.model.id, 
         status:input.model.status, 
         mavenGav:input.model.mavenGav, 
         email:input.model.emailId, 
         errorNo:input.model.errorNo, 
         errorDesc:input.model.errorDesc }; 

    console.log("variables : "+ JSON.stringify(this.variables)); 

    this.template = _.template(tpl.get('requests')); 
    var out = this.template(input); 

    console.log("out: "+ JSON.stringify(out)); 

    // deep copy the object 
    this.request = $.extend(true, {}, input); 
} 

});

当我调试这个铬调试器,我得到以下日志,

input {"model":{"mavenGav":"fgdfgfdgdfg:fgdfgfd:gdfgdfg","repositories":["dfgdfgdfgf"],"emailId":"gdfg","id":1083,"createdTime":null,"status":"CREATED","errorNo":0,"errorDesc":null}} 
requests.js:12variables : {"request_id":1083} 

有没有错误。剩下的分配给this.variables的javascript文字会发生什么?

+1

只记录对象:'console.log(this.variables);'。我猜其他属性是'undefined',它们在JSON中被省略,因为['undefined'不是允许的值](http://json.org/)。 – 2012-04-09 20:25:11

+0

当我在jsfiddle中测试这个时,我得到了正确的答案:http://jsfiddle.net/8BwPn/1/ Hmzzz。 – koenpeters 2012-04-09 20:31:48

+0

我已经更新了代码http://jsfiddle.net/8BwPn/4/,现在它不打印任何东西。这是我的问题。我可以在对象文字中使用变量吗? – Nambi 2012-04-09 21:00:42

回答

0

undefined由于json只知道数字,字符串,布尔值,空值和对象/数组,因此值不会被串化为json。所以这些属性是存在的,但是它们在转换中会“迷失”。

尝试console.debug("variables :",this.variables),这将让你检查变量对象。

+0

由于该对象是骨干模型,因此获取值的方法是使用'get'方法。 console.log打印它,就好像它是一个普通的JS对象一样。但是,当你想访问成员变量时,使用'get'方法。 – Nambi 2012-05-01 20:53:09