#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Во-первых, приношу извинения за название — если у кого-нибудь есть версия получше после прочтения вопроса, пожалуйста, отредактируйте или попросите меня.
Я расширил объект core Backbone Collection методом ‘where’, который позволяет мне выполнять _.select для моделей в коллекции. В настоящее время это возвращает новый объект ванильной коллекции, содержащий модели. Я хочу, чтобы метод возвращал объект коллекции того же типа, что и вызываемый мной…
Магистраль.Коллекция.прототип.где = функция(a) { var execute = функция(элемент) { ... }; возвращает новую магистраль.Коллекция (this.select(выполнить)); }; переменные учетные записи = Магистраль.Collection.extend({...})
Что я хочу, в инструкции return должно быть возвращено новое собрание учетных записей. Но я не хочу определять или расширять этот метод в каждой расширяемой мной коллекции. Что-то вроде следующего псевдокода:
возвращает новый экземпляр этого (this.select(выполнить));
Имеет смысл?
Ответ №1:
Я не на 100% уверен в том, что вы просите, но я думаю, вы хотите запустить ‘where’ для экземпляра коллекции и получить обратно НОВУЮ коллекцию. Просто поигрался в firebug и придумал это:
var Chapter = Backbone.Model;
var chapters = new Backbone.Collection;
chapters.comparator = function(chapter) {
return chapter.get("page");
};
chapters.add(new Chapter({page: 9, title: "The End"}));
chapters.add(new Chapter({page: 5, title: "The Middle"}));
chapters.add(new Chapter({page: 1, title: "The Beginning"}));
Backbone.Collection.prototype.where = function(selector) {
var newCol = new this.__proto__.constructor();
var itemsToInsert = this.select(selector);
itemsToInsert.forEach(function(item){ newCol.add(item) });
return newCol;
};
chapters.where(function(c){ return c.get('page') == 1 });
`
Вероятно, это можно было бы сделать лучше.. но это кажется функциональным.
Комментарии:
1. Замена моего кода на ваш генерирует ошибки в дальнейшем в приложении, поэтому я предполагаю, что этот код не возвращает правильную коллекцию.
2. Да, я не уверен, что способ, которым я создаю newCol, является правильным способом сделать это… что за ошибки? Возможно, удастся разобраться с этим .. проверка firebug показывает, что это «выглядит» как базовая коллекция.
3. Да, проверка выглядит как коллекция, но затем попытка запустить методы коллекции выдает ошибки, говорящие, что они не определены. На данный момент я сделаю это длинным путем, я думаю.