своя реализация Knockout
Здравствуйте
Я делаю свою реализацию библиотеки KnockoutJS и мне нужен ваш совет. Сперва отвечу на вопрос "Зачем делать свою реализацию?".
Как я предлагаю создавать конфиг биндингов 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"} } } } Заранее спасибо за коментарии |
Велосипед очень сомнительный, я бы на него не сел. )))
сразу что непонравилось с лёту. 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 что ли ? |
Видно вы не в теме, до форыча все биндинги описаны в стиле нокаута. Конекретно по вашему примеру http://knockoutjs.com/documentation/css-binding.html
|
пардон, перепутал с style, претензия снята.
|
Часовой пояс GMT +3, время: 15:13. |