当我从服务器获取模型或集合时,除非我进行字符串化然后重新解析,否则我无法访问模型的属性。据推测,模型本身有一些来自backbone.js的额外开销?请注意,在下面的代码中,我可以顺序执行stringify / parse,这应该给出与我开始时相同的结果。然而,显然我通过执行这两个步骤来消除一些多余的信息,因为我的模型的属性现在与以前不同。当然,我不需要通过这两个步骤来访问我的模型属性,对吧?
Eg.
thismodel = /// assume this came from server fetch
alert(thismodel.name); // DOES NOT WORK - undefined
jsonmodel = JSON.stringify(thismodel);
var providerprefslistJSON = jQuery.parseJSON(jsonmodel);
alert(providerprefslistJSON.name); // WORKS
答案 0 :(得分:1)
Backbone Model对象不是普通的旧JavaScript对象。他们将自己的属性保存在an internal hash中。要访问name
属性,您可以执行以下操作:
alert(thismodel.attributes.name);
或者更好地使用the get() method:
alert(thismodel.get("name"));
将模型转换为JSON然后再返回时它起作用的原因是JSON.stringify
调用the toJSON() method,它从内部属性hash 创建一个JSON字符串,这意味着当您解析该字符串时,您将获得一个普通的旧JavaScript对象 - 这与Backbone Model对象不同。
答案 1 :(得分:0)
首先,您是否尝试访问模型或响应的属性?
从alert(thismodel.name)
开始,你似乎要找到模型的属性而不是属性。如果您正在寻找模型属性,那么您可能需要alert(this.model.get('name'))
如果您确实要使用model.name,那么基本上问题可能在于您如何解析数据。比如说服务器中的JSON就像这个{'name':'Jimmy'}。
虽然发送的原始JSON的model.response
在object.name下命名为“Jimmy”,但Backbone会自动将其转换为模型属性,除非另有指示(例如modelObj.attributes.name)你可以使用get()
函数。
如果一切正常,您应该可以非常简单地访问模型数据。
E.g。取
var model = new MyModel();
model.id = 1;
model.fetch({
success: function(model, response) {
console.log(model.get('name')); // The model name attribute
console.log(response.name); // The RAW response name property
}
});
或者您的服务器可能没有将数据作为JSON数据发回。服务器响应是content-type="application/json"
吗?
要检查的一些事情。