
03.02.2012, 18:58
|
 |
Куратор
|
|
Регистрация: 18.09.2011
Сообщений: 443
|
|
|
backbone, вопросов 9000
как то мне сложно очень дается backbone, код с ним выходит обьемный так что начну с отрывков.
window.content = Backbone.Model.extend({
url : "ajax/lenta",
isValid : function(attr) {
attr = attr || this.attributes;
if(!attr.author || !attr.text) {
return 'Require`s attribute missed';
}
}
});
обьявляем метод isValid для проверки атрибутов модели перед отправкой запроса, все работает ок, но это стандартный подход.
if(!this.model.isValid()) {
this.model.save(null, {
success : function() {
self.model.clear();
self.render();
}
});
} else {
this.el.find('.error').show().text('Missed attribute');
}
Как реализовать с использованием validate или других правильных методов? да validate генерит эвент error перед отправкой запроса, но остановить запрос это никак не помогает T_T
|
|

05.02.2012, 01:39
|
 |
Куратор
|
|
Регистрация: 18.09.2011
Сообщений: 443
|
|
продолжаю оставлять отрывки
app.Collection = Backbone.Collection.extend({
query : '',
url : function() {
return 'ajax/auc/' + Base64.encode(this.query);
}
});
app.Controller = Backbone.Router.extend({
target : $('#panel'),
initialize : function() {
_.bindAll(this, 'keyup');
this.target.on('keyup', this.keyup);
},
keyup : function() {
this.collection.query = this.target.val();
this.collection.fetch();
}
});
как правильно передавать информацию в REST формате используя встроенный функционал backbone?
возьмем например автокомплит, в коллекции хранится response, под сам поисковый запрос или аттрибут коллекции или напрямую передавать в fetch({data:{query:123}})
вообщем как собственно fetch`нуть коллекцию через /ajax/auc/:query
|
|

18.02.2012, 22:08
|
 |
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 440
|
|
Сообщение от nasqad
|
как то мне сложно очень дается backbone, код с ним выходит обьемный так что начну с отрывков.
window.content = Backbone.Model.extend({
url : "ajax/lenta",
isValid : function(attr) {
attr = attr || this.attributes;
if(!attr.author || !attr.text) {
return 'Require`s attribute missed';
}
}
});
обьявляем метод isValid для проверки атрибутов модели перед отправкой запроса, все работает ок, но это стандартный подход.
if(!this.model.isValid()) {
this.model.save(null, {
success : function() {
self.model.clear();
self.render();
}
});
} else {
this.el.find('.error').show().text('Missed attribute');
}
Как реализовать с использованием validate или других правильных методов? да validate генерит эвент error перед отправкой запроса, но остановить запрос это никак не помогает T_T
|
Вы сделали неправильно, проверяющую функцию нужно задавать в виде атрибута validate. Если функция не возвращает ничего, то это означает что ошибок нету, если возвращает текст, то он интерпретируется как сообщение об ошибке. Метод isValid позволяет в любой момент принудителньо запустить валидацию модели, его не стоило переопределять вообще.
|
|

18.02.2012, 22:55
|
 |
Куратор
|
|
Регистрация: 18.09.2011
Сообщений: 443
|
|
м спасибо, правда уже разобрался, у меня сейчас больше вопросы вида
"как организовать взаимодействие с родительским представлением и ее коллекцией" T_T
например в этом примере вьюшка производит изменения в элементах не принадлежащих её зоне ответственности, при том событие надо обрабатывать с учетом модели вызвавшей её -_- вариантов реализации много но они все корявые, и это приводит к мысли что изначально структура приложения выбрана неверная, понимание этого отнимает очень много времени
http://pastebin.com/NFTceTL8
|
|

18.02.2012, 23:11
|
 |
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 440
|
|
Сообщение от nasqad
|
м спасибо, правда уже разобрался, у меня сейчас больше вопросы вида
"как организовать взаимодействие с родительским представлением и ее коллекцией" T_T
например в этом примере вьюшка производит изменения в элементах не принадлежащих её зоне ответственности, при том событие надо обрабатывать с учетом модели вызвавшей её -_- вариантов реализации много но они все корявые, и это приводит к мысли что изначально структура приложения выбрана неверная, понимание этого отнимает очень много времени
http://pastebin.com/NFTceTL8
|
Не понял суть проблемы, можете перефразировать свой вопрос?
|
|

18.02.2012, 23:23
|
 |
Куратор
|
|
Регистрация: 18.09.2011
Сообщений: 443
|
|
ну мне кажется такие вопросы сложно решить без полного тз и кода, так что это риторический вопрос был
setStatus: function (e) {
this.model.save(null, {
success: function (model, response) {
$(e.target).parents('ul').find('.active').removeClass('active');
$(e.target).parents('li').addClass('active');
$(e.target).parent().hide();
}
})
}
вот таке кусочки кода мне кажутся ошибочными, тут должно быть что то вроде this.model.setActive();, но так как пункт меню активный может быть лишь один, надо перебрать все элементы коллекции которая принадлежит уже другой вьюшке, после чего перерисовать всю коллекцию, что тоже весьма досадно) вообщем я не умею формировать вопросы но все равно спасибо
проблема в том что если есть две цепочки
a) model-view
b) model-collection-view
то обратится от a-view к b-collection не представляется возможным без каких то извращений
|
|

18.02.2012, 23:49
|
 |
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 440
|
|
У вас не совсем полное видение MVC. Согласно классическому паттерну представление может напрямую использовать методы модели (так как написано у Вас), а модель может косвенно вызывать методы представлений используя события. То есть Вам нужно подписать ту самую "левую вьюху" на событие change модели и написать в ней метод для перерисовки меню (или что там Вам нужно).
В итоге цепочка будет выглядеть так: view_1 call model_1 trigger event view_2
То есть мы косвенно сделали так: view_1 call view_2
Последний раз редактировалось DreamTheater, 19.02.2012 в 00:03.
|
|

21.02.2012, 17:03
|
 |
Куратор
|
|
Регистрация: 18.09.2011
Сообщений: 443
|
|
cпасибо ссылка на вики помогла, я к сожалению вынужден революционным методом входить в паттерны проектирования
теперь однако все равно остается вопрос, насколько детализировать внутренние евенты, тоесть если реакция на событие может быть в отношении двух элементов, то вешать обработчик события в каждом представлении или же обрабатывать все в одном, но с этим я позже сам разберусь, наверное ключевое тут поддержание уровня абстракции
насущный вопрос, есть несколько приложений(модулей) автономных, которые при инициализации запрашивают с серва коллекции
при обьединении их в более крупное приложение, они соответственно выстреливают 3-4-5 запросов одновременно, + автообновление каждые Х секунд таким же кол-вом запросов 
их скорей всего надо обьединить в один запрос от вышестоящего приложения? или же много-запросов - нормальная практика?
в случае делегирования "запроса с серва" во вне конкретных модулей, мне кажется они потеряют свою автономность и это нехорошо -_-
|
|

21.02.2012, 17:29
|
 |
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 440
|
|
|
|
|

23.02.2012, 00:52
|
 |
Куратор
|
|
Регистрация: 18.09.2011
Сообщений: 443
|
|
Сингелтон сложнота, точнее я не понял как это применить к моей задаче, так то вроде бекбоне роутер сам являет собой синглетон, с этим я разберусь когда буду готов к профессиональному коду, cпасибо 
простой вопрос, внезапно заметил что бекбоне вешает новым элементам вьюшек id="%model-id", раньше вроде не было, можно как то отказаться от этого бонуса кроме переназначения?
кроме того, есть какая то альтернатива requirejs для серверной стороны, максимально простая? быстрый поиск ничего актуального не дал, requirejs нужен лишь в огромных проектах, кроме того он очень тяжеловесный, самому писать не хочется:3
Последний раз редактировалось nasqad, 23.02.2012 в 00:56.
|
|
|
|