gpt4 book ai didi

javascript - 无法通过 CID 获取 Backbone 集合中的模型

转载 作者:行者123 更新时间:2023-11-28 20:36:34 25 4
gpt4 key购买 nike

我在主干中有以下模式/集合/ View 设置。

var Card = {};  

//card model
Card.Model = Backbone.Model.extend();


//collection
Card.Collection = Backbone.Collection.extend({
url: '/api/cards',
model: Card.Model
});

//column view
Card.MainView = Backbone.View.extend({
className: 'column',
append: function(model) {
var view = Card.View.extend({
model : model,
attributes: { cid : model.cid }
});
var v = new view();
this.$el.append(v.el);
},
initialize: function() {
var self = this;
_.bindAll(this, "sortable");
this.collection.fetch({
success: function() {
self.render();
}
});
},
render: function() {
var self = this;
for(var i = 0; i < this.columns.length; i++) {
var col = this.columns[i];
var column = Card.ColumnView.extend({
data: col,
cards: self.collection.where({ position : col.position })
});
var col = new column();
this.$el.append(col.el);
}
this.sortable();
},
sortable: function() {
var self = this;
$(this.el).find('.card-container').sortable({
connectWith: '.card-container',
receive: _.bind(function(event, ui) {
var cid = $(ui.item).attr('cid');
var card = self.collection.get(cid);
//console.log(self.collection.last());
console.log('cid', self.collection.get(cid));
console.log('index 1', self.collection.at(1));
console.log('last', self.collection.last());
console.log('collection', self.collection);
}, this)

});
}
});

当我尝试在 sortable 函数中从 MainView 集合中获取模型时,它不会按 CID 记录模型。我得到以下输出。

cid undefined CardMetaCollection.js:97
index 1 d {collection: d, attributes: Object, _escapedAttributes: Object, cid: "c2", changed: Object…} CardMetaCollection.js:98
last d {collection: d, attributes: Object, _escapedAttributes: Object, cid: "c249", changed: Object…} CardMetaCollection.js:99
collection d {length: 249, models: Array[249], _byId: Object, _byCid: Object, url: "/api/cards"…}

我已尝试登录 fetch 方法的 success 回调,但我仍然收到未定义的返回...每个模型都有自己的 cid。非常感谢任何帮助。

最佳答案

.get()方法接受 idcidid可以直接传给get ,但是cid必须作为对象文字传递。其实你可以通过id也在对象文字中并使您的代码保持一致。

var cid = ...;
var card = self.collection.get({ cid: cid });

var id = ...;
var card = self.collection.get({ id: id });

var id = ...;
var card = self.collection.get(id);

您可以查看.get()在backbone.js 中实现。

更新:cid单独可以传递给.get() Backbone 0.9.9 或更高版本中的方法(请参阅 implementation in the current 1.3.3 )。

var cid = ...;
var card = self.collection.get(cid);

就您而言,问题可能出在卡片元素上缺少属性“cid”,如 Ben写道。您声明了.append()方法将此属性添加到新元素,但您调用 new column()而不是 .render() 中的它方法。看来,column view 没有添加该属性,因为您的日志记录发现它 undefined .

注意:请考虑使用有效的自定义 HTML 属性名称,例如“data-cid”,而不仅仅是“cid”。

关于javascript - 无法通过 CID 获取 Backbone 集合中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244330/

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