Fab*_*lla 2 requirejs backbone.js backbone-views backbone.js-collections
加载视图时,收集长度始终返回1,而解析函数中当前显示3个成员.我想知道问题是否是嵌套项目视图,但似乎没有相同的行为!我不明白为什么self.push(成员)不会将模型添加到集合中!有点困在这里,有什么帮助吗?
该模型
define([
'backbone'
], function(Backbone) {
'use strict';
var MemberModel = Backbone.Model.extend({
id: "_id"
});
return MemberModel;
});
Run Code Online (Sandbox Code Playgroud)
这个系列
define([
'backbone',
'models/MemberModel'
], function(Backbone, MemberModel) {
'use strict';
var Members = Backbone.Collection.extend({
model: MemberModel,
url: '/api/v1/users',
parse: function(response, options) {
var self = this;
_.each(response.users, function(item){
var member = new self.model();
member.set('email', item.email);
member.set('firstname', item.firstname);
member.set('lastname', item.lastname);
member.set('group', item.group);
member.set('city', item.city);
// shows every member's emails
console.log('member.email='+member.get('email'));
self.push(member);
});
console.log('this.length='+this.length); // this is always equal to 1
return this.models;
}
});
return Members;
});
Run Code Online (Sandbox Code Playgroud)
风景
define([
'collections/members',
'views/membersItem',
'text!templates/members.html'
], function(MembersCollection, MembersItem, membersTpl) {
'use strict';
var Members = Backbone.View.extend({
el: '#settings-content',
template: _.template(membersTpl),
events: {
'click #edit-member': 'editMember'
},
initialize: function() {
this.collection = new MembersCollection();
this.render();
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
var self = this;
this.collection.fetch({
success: function() {
self.renderMember();
}
});
return this;
},
renderMember: function() {
// same here collection length = 1
console.log('collection.length:'+this.collection.length);
_.each(this.collection.models, function (item) {
var memberView = new MembersItem({model: item});
$('.list-item', this.el).append(memberView.render().el);
}, this);
}
});
return Members;
});
Run Code Online (Sandbox Code Playgroud)
嵌套项目视图
define([
'text!templates/members_item.html'
], function(membersItemTpl) {
'use strict';
var MembersItem = Backbone.View.extend({
tagName: "tr",
className: '.item',
template: _.template(membersItemTpl),
initialize: function() {
this.model.bind("change", this.render, this);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
return MembersItem;
});
Run Code Online (Sandbox Code Playgroud)
看起来问题是id's在集合中重复.它应该是一个唯一的标识符.
在模型中设置idAttribute并确保所讨论的3个对象的id不同.
var MemberModel = Backbone.Model.extend({
idAttribute: "_id"
});
Run Code Online (Sandbox Code Playgroud)
如果您的ID重复,则模型将不会添加到模型中.
如果这不起作用,请尝试id明确设置属性
_.each(response.users, function(item, index){
var member = new self.model();
member.set('_id', index);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |