Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2012, 19:15
Новичок на форуме
Отправить личное сообщение для redexp Посмотреть профиль Найти все сообщения от redexp
 
Регистрация: 10.05.2012
Сообщений: 2

своя реализация Knockout
Здравствуйте

Я делаю свою реализацию библиотеки KnockoutJS и мне нужен ваш совет.

Сперва отвечу на вопрос "Зачем делать свою реализацию?".
  1. Мне не нравится то что биндинги нужно описывать в атрибутах тегов.
  2. Имея свою готовую модель, не так просто прилепить к ней нокаут. Нужно переписывать все сеттеры и добавлять в них сеттеры нокаута.
  3. Для работы с массивами приходиться хранить копию массива в своей модели и в нокауте.
  4. Сам нокаут недостаточен для того, чтобы использовать его как модель, так как нету методов синхронизации с сервером.

Как я предлагаю создавать конфиг биндингов
var conf = { 
    ".name": {text: "name"}, 
    ".age":  { 
        text: "age", 
        css: { 
            red: "age > 50", 
            orange: "30 < age && age <= 50", 
            green: "age <= 30" 
        } 
    }, 
    ".friends": { 
        foreach: { 
            field: "friends", 
            bind: { 
                ".name": {text: "name"} 
            } 
        } 
    }
};

var viewModel = ko.applyBindings(model, conf, rootNode);


Объект viewModel в себе хранит один метод trigger который принимает имя поля или метода в модели и обновляет все ноды, которые имеют биндинги связанные с этим полем или методом.

На данный момент реализовано биндинги text и css. Я остановился на foreach. Мне интересна ваша мысль как лучше всего описывать конфиг этого биндинга и как говорить viewModel что изменилось какое-то поле объекта внутри массива?
Моё предложение вот так сделать конфиг
{
	foreach: {
		field: "friends",
		parentName: "parent",
		initViewModel: true,
		bind: {
			".name": {text: "name + ' is friend of ' + parent.name"}
		}
	}
}


а тригерить вот так
viewModel.get('friends')[0].trigger('name');


Если initViewModel будет равен false тогда зависимости между элементами массива и вьюшкой не создадутся.

Естественно parentName и initViewModel будут иметь какие-то дефолтные значения и их писать не нужно будет, вопрос только какие значения?

ещё одна идея для сокращения конфига - вместо bind писать имя массива в модели
{
	foreach: {
		friends: {
			".name": {text: "name + ' is friend of ' + parent.name"}
		}
	}
}


Заранее спасибо за коментарии
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2012, 20:39
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Велосипед очень сомнительный, я бы на него не сел. )))
сразу что непонравилось с лёту.

css: { 
            red: "age > 50", 
            orange: "30 < age && age <= 50", 
            green: "age <= 30" 
        }

Это какой то синтаксический вынос моозга )))
справа это как я понял фильтр ?
Если так, то при age<=30 получиется что то вроде css: { green }, ну или css=green;
вот собственно и вопрос куда color делся ? Или background к примеру, да и вообще все css стили ?. С какого перепуга там вдруг green? где логика ? где здравый смысл ?

И кстатии немогу не спросить, если в нормальном knockout связывание происходило дикларативно в view, то где же в этом чуде размещать код указывающий на связь (конфиг биндингов), в viewmodel что ли ?
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 10.05.2012 в 22:58.
Ответить с цитированием
  #3 (permalink)  
Старый 11.05.2012, 00:01
Новичок на форуме
Отправить личное сообщение для redexp Посмотреть профиль Найти все сообщения от redexp
 
Регистрация: 10.05.2012
Сообщений: 2

Видно вы не в теме, до форыча все биндинги описаны в стиле нокаута. Конекретно по вашему примеру http://knockoutjs.com/documentation/css-binding.html
Ответить с цитированием
  #4 (permalink)  
Старый 11.05.2012, 08:13
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

пардон, перепутал с style, претензия снята.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация игрового поля для игры "Точки" last-art Events/DOM/Window 7 22.04.2012 03:18
Реализация функции include BreatheInTheVoid Общие вопросы Javascript 4 23.09.2010 14:23
реализация хитрого банера с помощью js seleve Элементы интерфейса 6 17.08.2010 15:08
Реализация "Удалить"..."Восстановить" как вконтакте.ру Darooma2 AJAX и COMET 10 26.05.2010 13:41
Реализация слайдера Vitaly jQuery 15 27.08.2009 23:27