All streams
Search
Write a publication
Pull to refresh
2
0
Send message
Ресурс просто привет из 90-х. Как раз для самого популярного js фреймворка.
Ну хоть кого-то он устраивает :)
сорри, промахнулся
Зачем все впадают в крайности? Сложный интерфейс с MVC на клиенте должен быть хорошо спроектирован, нужно все взвешивать и решать, что можно делать асинхронно, а что нет.

Даже если ожидание ответа от сервера, блокирует только часть интерфейса/функционала и пользователю есть чем заняться пока ваш сервер работает — вот он, асинхронный ui.
Вы все правильно поняли. «Стандартная реализация» дополнительных действий при синхронизации с сервером — переопределить / переписать Backbone.sync.
Только сделали вы это немного варварски.

Более правильно — добавить нужную логику, а не полностью переписывать все, что не устраивает, например:
var SomeModel = Backbone.Model.extend({
    …
    sync: function(method, model, options) {
        var myOptions = options;
 
        if (method == 'create') {
            myOptions.success = function(resp, status, xhr) {
                if (resp.has_error) {
                    console.log('Error', resp);
                    return;
                }
 
                return options.success(resp, status, xhr);
            };
        }
 
        Backbone.sync.call(this, method, model, myOptions);
    }
});
Ок, каюсь :)
К чему тогда относиться ваше «как это сделать со стандартной реализацией»?
>> Мне например нужно попутно отсылать состояние (просто строка) + сообщение об ошибке (если нужно).

Если единоразово — в методы save и fetch можно передавать хэш с настройками для jQuery.ajax:

model.save({}, {data: {state: 1}});
model.fetch({data: {state: 2}});


Можно переопределить метод sync для конкретной модели или коллекции:

var someModelData = {data: {state: 1}};
 
var SomeModel = Backbone.Model.extend({
    …
    sync: function(method, model, options) {
        var myOptions = options;
 
        if (method == 'read') {
            myOptions = _.extend(someModelData, myOptions);
        }
 
        Backbone.sync.call(this, method, model, myOptions);
    }
});


Ну и наконец, можно расширить Backbone.sync, а не переписать полностью:

var someData = {data: {state: 1}};
var oldSync = Backbone.sync;
Backbone.sync = function(method, model, options) {
    var myOptions = options;
 
    if (method == 'read') {
        myOptions = _.extend(someData, myOptions);
    }
 
    return oldSync(method, model, myOptions);
};
Код у вас во вьюхах ужасный. Зачем использовать data-аттрибуты для хранения данных, которые вы храните в модели? Почему не используете delegateEvents для обработки событий вьюхи?

Посмотрите хороший скринкаст (peepcode).
это они зря :)
>> А Datejs чем неадекватна?
Last updated 2008-04-14
Есть отличный плагин для jQuery. Достаточно гибко настраивается и работает на всех браузерах
Вся важная инфа бэкапится :)
Можно успеть проверить орфографию перед отправкой :)
У меня теперь каша в голове, я не смогу заснуть
В backbone.js всего около 1000 строк, так что в чужом коде не погрязнешь.
Ну и как минимум можно подсмотреть удачные решения для своего велосипеда :)
Knockout отличная штука. Но его способ связывание модели с видом — прямо в html-разметке, мне не нравиться. Грязновато получается:
<textarea data-bind="value: message, valueUpdate: 'afterkeydown'"></textarea>

<ul data-bind="template: { name: 'itemTmpl', foreach: items, templateOptions: { selected: selectedItem } }">
</ul>


* This source code was highlighted with Source Code Highlighter.
Лично я с опаской отношусь к Graphics :)
Чтобы избежать путаницы использую только мувики. Но ваша идея интересна, надо попробовать
MovieClip-у можно задать имя и по имени обращаться из кода.
Основное отличие насколько я понимаю, в том, что MovieClip проигрывает кадры внутри себя, а кадры внутри Graphics проигрываются его родителем.
Т.е. если сделать Graphics с пятью кадрами и поместить его на сцену с тремя, воспроизводиться будут только три кадра из Graphics, MovieClip же будет проигрывать все свои кадры в каждом кадре родителя.

Information

Rating
Does not participate
Registered
Activity