Я недавно начал использовать Backbone.js
. Мне нравится архитектура, с точки зрения возможностей, это почти то, что мне нужно ...
... Однако я нашел следующие предостережения:
- Для
Collection
с get
означает нечто иное, чем для Model
с. Там нет 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()
? Это класс модели или экземпляр модели?
EDIT (2):
Ну, я нашел это: http://maccman.github.com/spine/. Похоже, Backbone.js 2.0, тоже имеет похожее имя :). Пока еще не тестировал, что может показаться чем-то вроде пробной демонстрации, поскольку библиотека очень недавно. Однако со стороны документов это выглядит очень многообещающе. Он избавляет от большинства проблем, которые я обнаружил, упрощает API, даже избавляется от зависимости от underscore.js
, что для библиотеки - хорошая вещь. Я опубликую свои дальнейшие выводы здесь.