2012-01-06 2 views
1

Я должен делать что-то глупое, или, может быть, пропустить какую-то важную часть документации на базовую станцию, но я не могу понять, почему функция Model.validate запускается, когда я инициализирую новую коллекцию таким образом: http://jsfiddle.net/5a3k/QSeH6/ .. любые идеи, м не так?backbone-js: как я могу без проблем инициализировать новую коллекцию?

редактировать: изменены название

ответ

4

Выполнив эту строку:

var myCollection = new Collection([{id: 'smith'}]); 

Вы создаете новую коллекцию с одной моделью. Все модели, переданные в конструкторе, будут добавлены в коллекцию. Каждая добавленная модель проверяется.

Детали:

  1. Backbone.Collection конструктор вызова this.reset() (source).
  2. .reset() беззвучно добавит все модели в коллекцию (source).
  3. .add() будет вызывать внутренние ._add() для каждой модели (source).
  4. Внутренний ._add() позвонит .prepareModel, который проверяет, действительна ли модель (source).

Update (на основе редактирования в вопросе):

model.validate выполняется только если модель не является экземпляром Backbone.Model (source).

Так что, если вы создаете коллекцию, используя

var myCollection = new Collection([{id: 'smith'}]); 

то модель экземпляр Object. Но если вы используете:

var myCollection = new Collection([ new Model({id: 'smith'}) ]); 

то модель экземпляр Backbone.Model и проверка пропускается.

+0

yes thats, что я думал, поэтому я делаю 'myCollection.reset ([{id: 'smith'}]);' - http://jsfiddle.net/5a3k/QSeH6/17/ .. но проверять все еще огни .. – zack

+0

@zack: См. Подробности в ответе. Конструктор вызывает '.reset()', который добавляет и проверяет модель. Если вы вызываете '.reset()' самостоятельно, вы также запускаете проверку - только 1-й шаг в списке деталей пропускается. – kubetz

+0

спасибо, извините за плохо сформулированный вопрос - см. Править – zack

Смежные вопросы