当我从服务器获取模型或集合时,除非我进行字符串化然后重新解析,否则我无法访问模型的属性。想必模型本身有一些来自backbone.js的额外开销?请注意,在下面的代码中,我可以顺序执行字符串化/解析,这应该给出与我开始时相同的结果。然而,显然我通过执行这两个步骤消除了一些多余的信息,因为我的模型的属性现在的暴露方式与以前不同。当然,我不需要通过这两个步骤来访问我的模型属性,对吗?

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
有帮助吗?

解决方案

骨干模型对象不是纯旧的javascript对象。它们在内部哈希中保持其属性。要访问name属性,您可以执行以下操作:

alert(thismodel.attributes.name);

或更好但使用 get()方法

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

当您将模型转换为JSON时,它的原因是因为JSON.stringify调用 the tojson()方法,它从创建一个json字符串,从内部属性hash ,含义当解析该字符串时,您得到一个纯旧的javascript对象 - 它与骨干模型对象不同。

其他提示

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

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

有些事情要检查。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top