2015-06-19 2 views
0

У меня есть приложение для рельсов с 4 классами моделей с несколькими экземплярами в каждой таблице. Я создал базовые классы модели и коллекции в CoffeeScript для соответствия. Я могу успешно загрузить все коллекции и сделать их в виде. Все идет нормально. Вот один из моих коллекций, и связанной с ним моделью:добавление моделей в базовые коллекции

class window.CoffeeWater.Collections.Histories extends Backbone.Collection 
url: '/api/histories' 
model: History 

class window.CoffeeWater.Models.History extends Backbone.Model 

Мне нужно, чтобы иметь возможность создать объект модели истории, а затем добавить его в коллекцию историй. В документации указано, что я должен установить свойство «коллекция» при создании моей новой модели, чтобы получить свойство «url» из коллекции. Моя проблема заключается в том, что я не могу показаться, чтобы правильно установить «коллекции» значение свойства, поскольку свойство URL не получает установлен на модели, например

attributes = {'start_time': new Date (1434740259016), 'stop_time': new Date (1434740259016 +(86400*1000)), 'valve_id': 2} 
options = { collection: window.CoffeeWater.Collections.Histories } 
history = new window.CoffeeWater.Models.History(attributes, options) 
window.CoffeeWater.Objects.Collections.Histories.add(history) 

Проверка объекта получившегося «История» не показывает тот же атрибуты, которые существуют в моделях уже в коллекции, и свойство url отсутствует.

Я в настоящее время в порядке убывания. Кто-нибудь имеет пример о том, как это сделать? В документах backbone.js нет соответствующих примеров.

ответ

0

Способ определения URL-адреса в модели.

Если в модели есть свойство url.

class window.CoffeeWater.Models.History extends Backbone.Model 
url:'/api/history/1' 

Тогда, когда model.fetch(), он будет называть этот URL. Если это свойство не найдено, оно увидит, имеет ли связанная коллекция ссылка «url». Вы пытаетесь установить эту переменную коллекции.

Что вам не хватает это. Это

class window.CoffeeWater.Collections.Histories extends Backbone.Collection 

на самом деле является определением класса. Это еще не объект. Вам нужно инициализировать его, как в java. так

var historyCollection=new window.CoffeeWater.Collections.Histories() 

Теперь у вас есть объект коллекции. Когда вы делаете

historyCollection.add(history); 

«Сборник» модель автоматически устанавливаются в «historyCollection» объект, который содержит «URL». Поэтому на самом деле вам не нужно вручную устанавливать это в опцию.

основном

attributes = {'start_time': new Date (1434740259016), 'stop_time': new Date (1434740259016 +(86400*1000)), 'valve_id': 2} 
var historyCollection=new window.CoffeeWater.Collections.Histories() 
var history = new window.CoffeeWater.Models.History(attributes) 
historyCollection.add(history)