Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.07.2013 11:42:25

Backbone: проблема с validate

Может кто объяснить почему метод validate у модели вызывается 2 раза?
http://jsfiddle.net/YJrE3/

Не в сети

#2 03.07.2013 11:57:28

Re: Backbone: проблема с validate

Он вызывается при создании модели (ты передаёшь jsvalidate: true), а затем — при добавлении её в коллекцию. Можешь выяснить это сам, добавив debugger перед выводом в консоль и убрав -min из URL Backbone.

Не в сети

#3 03.07.2013 13:44:43

Re: Backbone: проблема с validate

Сделал так:
http://jsfiddle.net/YJrE3/3/

можешь в общем по коду что посоветовать?

Не в сети

#4 03.07.2013 13:48:22

Re: Backbone: проблема с validate

напиши в примере куда debugger пихнуть

Не в сети

#5 05.07.2013 06:47:16

Re: Backbone: проблема с validate

  1. можешь в общем по коду что посоветовать?

Могу.

js        el:'.animals',
        tagName: 'ul',

Нет смысла указывать оба свойства — ты либо создаёшь новый элемент для этого вида (не указывая el, но, возможно, указав className и tagName), либо привязываешь вид к существующему тегу через el — но в том случае будь осторожен и не создай этот вид дважды, иначе всё перемешается. Либо передавай ему его в options: jsnew Views.Animals({el: '#animals'}).

js        var AnimalView = new App.Views.Animals({ collection: AnimalCollection });
        AnimalView.$el.appendTo('.wrapper');
        AnimalView.render();

Тем более если посмотришь на свой код инспектором DOM, то увидишь xml<div class="animals"><li>...<li>...</div>.

  1. js_.each(this.collection.models,this.renderOne, this);

render() может быть вызван на уже существующем виде и твой код будет добавлять новый набор видов для каждой модели, которая у него есть. Обычно в render() очищают всё старое содержимое и полностью заменяют на новое. Именно так ты делаешь в View.Animal.render().

Когда мой вид — контейнер для коллекции, то обычно я держу в нем массив уже созданных видов (просто объект, где ключи — cid/id каждой модели, а значения — View), при добавлении/удалении модели обновляю его, а при изменении и при render() — циклом прохожу по нему и вызываю render() у каждого подвида.

  1. jsif(attr.name == '') { return 'min length 3 and max length 20'; }

Во-первых, твоё сообщение не согласуется с условием (ты проверяешь на пустую строку, а не на 3-20 символов). Во-вторых, хотя сам метод написан верно и модель будет проверяться, но при добавлении новой модели ошибки не будет видно из-за того, что ты показываешь сообщение по событию invalid у уже существующих моделей. Это исправляется добавлением в Views.Animals.initialize() обработчика для this.collection.on('invalid').

  1. напиши в примере куда debugger пихнуть

Замени на xml<script src="//backbonejs.org/backbone.js"></script> и:

js        validate: function(attr){
            debugger
            console.log(typeof attr.name, attr);

Не в сети

#6 05.07.2013 12:03:40

Re: Backbone: проблема с validate

Спс, большое.

А можешь подсказать как организовать работу с авторизированным юзером?

Мне видится так:

Когда летит запрос на сервер(не важно какой) то там проверяется авторизован юзер или нет, если нет то посылает ответ и юзера перекидывает на страницу авторизации, если он залогинен то возвращается нормальный ответ и продолжаем работу. Но тут вопросец, нужно будет модель User, там будут храниться данные по юзеру, получается что её надо обновлять время от времени.

Может есть ссылки на примеры?

Изменено Proger_XP (07.07.2013 12:50:13)

Не в сети

#7 07.07.2013 12:52:31

Re: Backbone: проблема с validate

Не вижу, в чём проблема. Если у тебя one-page web app, то всё делается через AJAX. Логично, что и вход/выход/регистрация и прочее делается так же. При инициализации (первом заходе на страницу) посылаешь запрос на сервер, он читает модель (БД) и если клиент авторизован — отправляет тебе его данные, если нет — 401 Unauthorized или просто 403. А ты уже ловишь этот ответ и делаешь то, что нужно.

Не в сети

Подвал раздела