gpt4 book ai didi

javascript - Backbone.js: Uncaught TypeError: Object # 没有方法 'get'
转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:33 32 4
gpt4 key购买 nike

您好,我有一个集合,它使用 fetch() 从 API 进行初始获取。在用户交互时,会触发第二次提取,但我没有使用原来的 fetch(),而是使用了我自己定义的 fetchNew():

收藏

ListingCollection = Backbone.Collection.extend({
model: Listing,
url: '/api/search_by_bounds',

fetchNew: function(options) {
options = options || {};
var collection = this,
success = options.success;
options.success = function(resp, status, xhr) {
_(collection.parse(resp, xhr)).each(function(item) {
// added this conditional block
if (!collection.get(item.id)) {
// Update collection
collection.add(item, {silent:true});
// Render View
new ListingMarkerView({ model:item }).render();
}
});
if (!options.silent) {
collection.trigger('reset', collection, options);
}
if (success) success(collection, resp);
};
return (this.sync || Backbone.sync).call(this, 'read', this, options);
}
});

这只会将新模型添加到集合中,并且只会呈现这些新模型的 View 。 (如果把所有的View都移除再重新渲染,会造成闪烁)

查看

ListingMarkerView = Backbone.View.extend({

render: function() {
var marker = L.marker([this.model.get('lat'), this.model.get('lng')]);
markers.addLayer(marker);
},

close: function() {
this.unbind;
}

});

错误

但是我得到一个错误:

Uncaught TypeError: Object #<Object> has no method 'get' 

对应于ListingMarkerView中的这一行

var marker = L.marker([this.model.get('lat'), this.model.get('lng')]);

调试

如果我要在呈现 ListingMarkerView 的行之前放置一个 console.log(item)

console.log(item)
new ListingMarkerView({ model:item }).render();

我确实看到了一个有效的 item:

Object
id: "2599084"
lat: "42.276852"
lng: "-71.165421"
price: "2850"
__proto__: Object

所以...

问题

问题是什么?如何解决?谢谢!

最佳答案

问题是 render 没有正确定义 this。在 View 类中添加一个 initialize 方法,如下所示:

initialize: function() {
_.bindAll(this); //Make all methods in this class have `this` bound to this class
}

关于javascript - Backbone.js: Uncaught TypeError: Object #<Object> 没有方法 'get',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655323/

32 4 0