0

当我从服务器获取模型或集合时,我无法访问模型的属性,除非我将其字符串化然后重新解析。大概模型本身有一些来自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
4

2 回答 2

1

骨干模型对象不是普通的旧 JavaScript 对象。它们将它们的属性保存在内部散列中。要访问该name属性,您可以执行以下操作:

alert(thismodel.attributes.name);

或者更好的是使用 get() 方法

alert(thismodel.get("name"));

当您将模型转换为 JSON 然后再返回时,它起作用的原因是因为JSON.stringify调用了 toJSON() 方法,该方法从内部属性哈希创建 JSON 字符串,这意味着当您解析该字符串时,您会得到一个普通的旧 JavaScript 对象 -与主干模型对象不同。

于 2012-09-30T21:23:54.137 回答
0

首先,您是否尝试访问模型或响应的属性?

看来alert(thismodel.name)您要寻找模型的属性而不是属性。如果您正在寻找模型属性,那么也许您想要alert(this.model.get('name'))

如果您确实要使用 model.name,那么基本上问题可能在于您如何解析数据。例如,来自您服务器的 JSON 类似于 {'name':'Jimmy'}。

虽然model.response发送的原始 JSON 在 object.name 下具有“Jimmy”命名空间,但 Backbone 会自动将其转换为模型属性,除非另有说明(例如 modelObj.attributes.name),此时您将使用该get()函数。

如果一切正常,您应该能够相当简单地访问模型数据。

例如获取

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"吗?

有些事情要检查。

于 2012-09-30T21:11:58.413 回答