gpt4 book ai didi

javascript - 从第三方 API 填充模型

转载 作者:行者123 更新时间:2023-11-30 11:44:52 25 4
gpt4 key购买 nike

我在一个个人项目中使用 Backbone,我在其中创建了一个名为 MyModel 的模型。在初始化这个模型时,我想从第三方 API 的 JSON 响应中填充它的属性:

app.MyModel = Backbone.Model.extend({
url: 'https://api.xxxxxx.com/v12_1/item?id=53444d0d7ba4ca15456f5690&appId=xxxx&appKey=yyyy',

defaults: {
name: 'Default Name'
}

});

此模型用于集合,该集合将用于嵌入另一个模型的属性:

app.MyModels = Backbone.Collection.extend({
model: app.MyModel
});

app.MyModel2 = Backbone.Model.extend({

// Default attributes
defaults: {
name: 'Default Name'
},

initialize: function() {
this.myModels = new app.MyModels();
this.myModels.on('change', this.save);
}
});

在为 MyModel2 创建的 View 中,我向全局元素添加了一个监听器,因此我们可以初始化 MyModel 的实例并将其添加到 MyModelsMyModel2 中。

app.MyModel2View = Backbone.View.extend({

initialize: function() {
// ...some code...
var self = this;
this.$(".add-myModel").click(function() {
var myModel = new app.MyModel();
myModel.fetch();
self.model.myModels.add(myModel);
});
// ...some code...
},
// ...some code...
});

这实际上是在完成预期的目标,但是当单击元素并添加实例时会在控制台中抛出错误:

backbone.js:646 Uncaught TypeError: this.isNew is not a function

在 Backbone 中,这是从外部 API 填充模型实例的正确方法吗?我正在尝试找出此错误的原因。

最佳答案

如果没有更完整的信息很难说,但看起来你在保存 MyModels 时没有正确设置上下文:

this.myModels.on('change', this.save);

这是 on() 方法的可选最后一个参数,所以可能:

this.myModels.on('change', this.save, this);

请参阅 documentation 中的详细信息

关于javascript - 从第三方 API 填充模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41335209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com