如何在 Marionette ItemView 中更新集合中的对象 运行 toJSON?
How to run toJSON on object from updated collection in Marionette ItemView?
我在集合中创建了一个包含模型的自定义对象,当我在 ItemView 中选择这个对象时 this.options.unique
我不能 运行 .toJSON
因为我得到一个错误说 Uncaught TypeError: this.options.unique.toJSON is not a function
。想知道我该如何解决这个问题?
Fiddle http://jsfiddle.net/kyllle/73m2ena9/3/
JS
var PersonModel = Backbone.Model.extend();
var PeopleCollection = Backbone.Collection.extend({
model: PersonModel
});
var PersonsItemView = Mn.ItemView.extend({
template: '.js-tmpl',
templateHelpers: function() {
return {
unique: this.options.unique
}
},
initialize: function() {
console.log(this.options.unique.toJSON());
}
});
var peopleCollection = new PeopleCollection(peopleArr);
var unqiueList = peopleCollection.filter(function(person) {
include = true;
exclude.forEach(function(exl) {
console.log(exl);
if (JSON.stringify(exl) == JSON.stringify(person)) {
include = false;
return;
}
})
if (include) return person;
});
console.log(unqiueList);
var personsView = new PersonsItemView({
unique: unqiueList
});
var region = new Backbone.Marionette.Region({
el: '.js-ctn'
});
region.show(personsView);
更新
我在模板 each
中添加了一个变量来抓取模型并转向 toJSON
,谁能告诉我这种方法是否可以接受?
<script type="text/html" class="js-tmpl">
<form action="">
<% _.each(unique, function(person) { %>
<% var personDetails = person.toJSON() %>
<input type="radio"><%= personDetails.name %><br>
<% }) %>
</form>
已更新 fiddle http://jsfiddle.net/kyllle/73m2ena9/7/
当您过滤一个集合时,它 returns 一个数组而不是您预期的集合 (ref)。因此,您可以使用从集合返回的数组创建新的集合实例。
var unqiueList = peopleCollection.filter(function(person) {
include = true;
exclude.forEach(function(exl) {
console.log(exl);
if (JSON.stringify(exl) == JSON.stringify(person)) {
include = false;
return;
}
})
if (include) return person;
});
unqiueList= new peopleCollection.reset(unqiueList);
var personsView = new PersonsItemView({
unique: unqiueList
});
我在集合中创建了一个包含模型的自定义对象,当我在 ItemView 中选择这个对象时 this.options.unique
我不能 运行 .toJSON
因为我得到一个错误说 Uncaught TypeError: this.options.unique.toJSON is not a function
。想知道我该如何解决这个问题?
Fiddle http://jsfiddle.net/kyllle/73m2ena9/3/
JS
var PersonModel = Backbone.Model.extend();
var PeopleCollection = Backbone.Collection.extend({
model: PersonModel
});
var PersonsItemView = Mn.ItemView.extend({
template: '.js-tmpl',
templateHelpers: function() {
return {
unique: this.options.unique
}
},
initialize: function() {
console.log(this.options.unique.toJSON());
}
});
var peopleCollection = new PeopleCollection(peopleArr);
var unqiueList = peopleCollection.filter(function(person) {
include = true;
exclude.forEach(function(exl) {
console.log(exl);
if (JSON.stringify(exl) == JSON.stringify(person)) {
include = false;
return;
}
})
if (include) return person;
});
console.log(unqiueList);
var personsView = new PersonsItemView({
unique: unqiueList
});
var region = new Backbone.Marionette.Region({
el: '.js-ctn'
});
region.show(personsView);
更新
我在模板 each
中添加了一个变量来抓取模型并转向 toJSON
,谁能告诉我这种方法是否可以接受?
<script type="text/html" class="js-tmpl">
<form action="">
<% _.each(unique, function(person) { %>
<% var personDetails = person.toJSON() %>
<input type="radio"><%= personDetails.name %><br>
<% }) %>
</form>
已更新 fiddle http://jsfiddle.net/kyllle/73m2ena9/7/
当您过滤一个集合时,它 returns 一个数组而不是您预期的集合 (ref)。因此,您可以使用从集合返回的数组创建新的集合实例。
var unqiueList = peopleCollection.filter(function(person) {
include = true;
exclude.forEach(function(exl) {
console.log(exl);
if (JSON.stringify(exl) == JSON.stringify(person)) {
include = false;
return;
}
})
if (include) return person;
});
unqiueList= new peopleCollection.reset(unqiueList);
var personsView = new PersonsItemView({
unique: unqiueList
});