Недавно я начал использовать Backbone.js. Мне нравится архитектура, с точки зрения ее функций почти точно, что мне нужно...
... Однако я нашел следующие оговорки:
- Для
Collectiongetозначает нечто иное, чем дляModels. Нет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, которая для библиотеки - это хорошо. Здесь я расскажу о своих дальнейших результатах.