Недавно я начал использовать Backbone.js
. Мне нравится архитектура, с точки зрения ее функций почти точно, что мне нужно...
... Однако я нашел следующие оговорки:
- Для
Collection
get
означает нечто иное, чем дляModel
s. Нетset
. Атрибуты должны быть доступны обычным способом. Я считаю это довольно непоследовательным. Легко смешивать модели и коллекции. Есть ли что-то, что можно сделать, чтобы преодолеть это? - Назначение начальных значений внутри
Model.extend
не всегда работает. Например, назначениеurl
не приведет к переопределению поведения по умолчанию. Это может быть достигнуто только путем вызова методаset()
. Снова очень склонна к ошибкам. - Я все еще не знаю, нужно ли использовать
get
/set
внутриinitialize()
. - Я не понимаю, почему я не могу просто вызвать
_.bindAll(this)
внутриinitialize()
, и мне нужно указать конкретные имена функций, которые будут связаны следующим образом:_.bindAll(this, firstFunc, secondFunc, ...)
. Это не очень СУХОЙ.
Я хотел бы знать: каковы наилучшие практики в отношении упомянутых ситуаций? Что вы делаете, чтобы сделать структуру более последовательной - любой патч обезьяны? Я делаю что-то неправильно/против конвенции?
Буду благодарен за любые примеры хорошего реального мира. Я нашел это: http://documentcloud.github.com/backbone/docs/todos.html и http://liquidmedia.ca/blog/2011/01/backbone-js-part-1/, и те, которые не затрагивают ни одного из упомянутых проблемы. На самом деле они просто представляют простейшие идеи и абсолютно никаких пограничных случаев, поэтому может быть полезно что-то более сложное.
EDIT:
Хорошо, и есть еще одна фундаментальная мысль, которую я не понимаю:
- Мне разрешено добавлять дополнительные атрибуты в расширение следующим образом:
var SomeModel = Backbone.Model.extend({ myattribute: myvalue })
?- Если да, то почему последующие вызовы
new SomeModel().get("myattribute")
не работают?
- Если да, то почему последующие вызовы
- Что такое
this
внутриinitialize()
? Является ли модель образцом модели или модели?
ИЗМЕНИТЬ (2):
Ну, я нашел это: http://maccman.github.com/spine/. Похоже, Backbone.js 2.0, имеет аналогичное имя тоже:). Еще не проверял его, что может быть немного показательным стоппером, так как библиотека совсем недавно. Однако со стороны документов он выглядит очень перспективным. Он избавляется от большинства проблем, которые я нашел, он упрощает API, он даже избавляется от зависимости от underscore.js
, которая для библиотеки - это хорошо. Здесь я расскажу о своих дальнейших результатах.