Здравствуйте, dotneter, Вы писали:
D>Это почему же? Подобный транслятор можно использовать где угодно, хватило бы фантации, хоть с note.js, хоть пиши мобильные приложения с phonegap или расширения для браузеров.
Всё что ты перечислил это и есть разные контексты, для каждого из которых надо генерировать "особенный" джаваскрипт.
D>По моему универсальное решение это, беру файл test.n натравливаю на него n2js.exe получаю на выходи test.js добавлю зависимость от какой то общей либы nemerle.js и все, у меня вся логика test.n работает на джаваскрипте. Ну и желательно что бы не было какой либо низкоуровневой зависимости от стороних фреймворков, что бы они поставлялись в виде отдельных необязательных либах.
Это утопия. Окружение джаваскрипта и .NET слишко сильно различаются, чтобы можно было в общем случае получить test.js из test.n. Для того, чтобы код в test.js корректно исполнялся, тебе нужно написать нужную обвязку для того контекста, в котором test.js будет запущен.
Кстати, BCL — это тоже грубо говоря "низкоуровневая зависимость от стороннего фреймворка".
Здравствуйте, ionoy.
Вы писали:
I> Здравствуйте, dotneter, Вы писали: D>>Это почему же? Подобный транслятор можно использовать где угодно, хватило бы фантации, хоть с note.js, хоть пиши мобильные приложения с phonegap или расширения для браузеров. I> Всё что ты перечислил это и есть разные контексты, для каждого из которых надо генерировать "особенный" джаваскрипт.
Чем он особенный? Логика то как раз в том что js везде одинаковый и один транслятор можно использовать везде где есть js. D>>По моему универсальное решение это, беру файл test.n натравливаю на него n2js.exe получаю на выходи test.js добавлю зависимость от какой то общей либы nemerle.js и все, у меня вся логика test.n работает на джаваскрипте. Ну и желательно что бы не было какой либо низкоуровневой зависимости от стороних фреймворков, что бы они поставлялись в виде отдельных необязательных либах. I> Это утопия. Окружение джаваскрипта и .NET слишко сильно различаются, чтобы можно было в общем случае получить test.js из test.n.
Вы зачем то постаянно отталкиваетесь от .net, хотя нужно отталкиватся от js. Представте я написал какой то код на js, зачем мне в нем что то нужно от .net? Правильно .net там вообще не нужен. И задача у меня будет написать точно такой же код использую Nemerle и в нем мне .net тоже не нужен. I>Для того, чтобы код в test.js корректно исполнялся, тебе нужно написать нужную обвязку для того контекста, в котором test.js будет запущен.
Если под контектом вы понимаете api, то да, конечно мне нужно будет использовать статическую обертку над апи js, что бы была возможность его вызывать. Хотя использую позднее связывания, можно обойтись и без этого, но тут тогда теряется весь профит от перехода. I> Кстати, BCL — это тоже грубо говоря "низкоуровневая зависимость от стороннего фреймворка".
Какие конкретные классы в BCL вам нужны что бы транслировать в js?
Здравствуйте, VladD2, Вы писали:
VD>Это называется — протекающая абстракция.
Не-а, протекающая абстракция это когда тебе нужно сгенерить какой-то джаваскрипт, но фреймворк на такое (из-за архитектурных ограничений) не способен, а кастомный джаваскрипт вставлять не дает по идеологическим причинам.
Здравствуйте, catbert, Вы писали:
VD>>Это называется — протекающая абстракция. C>Не-а, протекающая абстракция это когда тебе нужно сгенерить какой-то джаваскрипт, но фреймворк на такое (из-за архитектурных ограничений) не способен,
Значит нужно дорабатывать фреймворк.
Но у меня есть очень большие сомнения, что оно нужно не по тому, что так хочется, а по тому, что оно действительно нужно.
C>а кастомный джаваскрипт вставлять не дает по идеологическим причинам.
Нет. Это именно протекающая абстракция.
То, что ты хочешь всё равно, что хотеть писать посреди C# на х86ом ассемблере.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Почти доделал макрос для предсавлений, который разбирает все выражения внутри вьюхи и генерирует валидную knockoutjs разметку.
Выглядит это примерно так:
То есть пишем по привычке, как будто просто хотим подставить значение, а на деле генерируются нужные аттрибуты и теги. Всё это дело проверяется компилятором, так что большинство ошибок отлавливается в компайл-тайм.
Пока не решил, как записывать выражения вроде:
Здравствуйте, ionoy, Вы писали:
I>Почти доделал макрос для предсавлений, который разбирает все выражения внутри вьюхи и генерирует валидную knockoutjs разметку.
Комплит и хинты работают? I>Пока не решил, как записывать выражения вроде: I>
Здравствуйте, VladD2, Вы писали:
VD>Комплит и хинты работают?
Тут мне видимо понадобится помощь. Хинты работают, но разъезжаются. И видимо по этой же причине не работает комплит. Я там просто очень сильно всё перелопатил, и пока ещё не успел занятся локейшенами.
I>>Так что сейчас там грязный хак, который основан на том, что несколько одинаковых атрибутов объединяются в один со значениями разделёнными запятыми. VD>В чем проблема? Зачем какие-то хаки?
Суть в том, что мне одним выражением надо задать три свойства. Как сделано сейчас:
data-bind атрибуты это просто текстовые значения, они никак не парсятся, только в самом конце объединяются в один атрибут. А нужно сделать что-то вроде:
<select options="$AvailableMeals.Options(s.Meal, //"value: Meal" -- Значение 's' приходит из цикла
meal => meal.MealName)" /> //optionsText: 'MealName'
Это всё, конечно, очень условно, но проблему отражает.
VD>Еще логично было бы вместо ":" использовать "=" в качестве разделителя.
А оно так и есть, там где используется ":", это текстовые атрибуты на данный момент.
Здравствуйте, ionoy, Вы писали:
I>Тут мне видимо понадобится помощь. Хинты работают, но разъезжаются. И видимо по этой же причине не работает комплит. Я там просто очень сильно всё перелопатил, и пока ещё не успел занятся локейшенами.
Когда парсишь подвыражения (компилятором), надо корректно задавать начальный локешон. Тогда все будет ОК.
I>Суть в том, что мне одним выражением надо задать три свойства. Как сделано сейчас: I>
I>data-bind атрибуты это просто текстовые значения, они никак не парсятся, только в самом конце объединяются в один атрибут. А нужно сделать что-то вроде: I>
I><select options="$AvailableMeals.Options(s.Meal, //"value: Meal" -- Значение 's' приходит из цикла
I> meal => meal.MealName)" /> //optionsText: 'MealName'
I>
Что-то как-то сложнее оригинала.
И что это дело означает? Что за Options? Что за s?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
I>><select options="$AvailableMeals.Options(s.Meal, //"value: Meal" -- Значение 's' приходит из цикла I>> meal => meal.MealName)" /> //optionsText: 'MealName' I>>[/code]
VD>Что-то как-то сложнее оригинала.
VD>И что это дело означает? Что за Options? Что за s?
Этого ничего не будет, конечно. Я просто пытался проиллюстрировать проблему.
Мы делаем коллекцию option из AvailableMeals. Для каждого option, нам надо определить 1. отображаемый текст 2. значение. По умолчанию оба выставляются в то, что содержится внутри тэга <option>. В данном случае текст должен браться из поля MealName. Псевдокод примерно такой:
Для того, чтобы в разметке получить интеллисенс для MealName, макрос должен знать из какой коллекции берётся текущее значение. Поэтому meal => meal.MealName (повторюсь, это только иллюстрация).
Две новости:
1. К проекту присоединился NN, будем развивать фреймворк и параллельно делать большой сэмпл проект
2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/
Здравствуйте, VladD2, Вы писали:
I>>2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/ VD>Как-то без исходников и пояснений это все не о чем.
Уже почти доделана поддержка встраевамых шаблонов. Как только будет более менее окончательный вариант, то можно будет написать небольшую статью-описание.
Здравствуйте, ionoy, Вы писали:
I>Две новости: I>1. К проекту присоединился NN, будем развивать фреймворк и параллельно делать большой сэмпл проект I>2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/
есть просьба от web-танкистов. что нужно прочитать, чтобы понять, как с этим работать после winforms?
Когда в голове будет чёткое понимание, что такое MVVM в вебе и как его использовать, то можно начинать смотреть исходники сэмплов нашего фреймворка. Это, собственно, те же самые туториалы, только переведённые на Немерле. АПИ ещё далеко не окончательный, так что на него не стоит опираться, но уже как минимум можно посмотреть, как это всё дело работает.
Здравствуйте, Аноним, Вы писали:
А>Скрипт выполняется на клиенте?
Да, на сервере генерируется HTML/Javascript, выполняются они на клиенте.
A>Процедуры валидации есть?
Смотря что подразумевается под валидацией. Если валидность введённых данных (required поля, длина строки и тд), то нет, встроенных механизмов пока нет. Но:
1. Никто не мешает использовать общедоступные механизмы, например, jquery.validation, DataAnnotations и т.д.
2. Очевидно надо будет сделать встроенную валидацию, однако это далеко не на первом месте
A>Темы будут?
Опять же, смотря что под ними подразумевается. Контролов то у нас нет, чистый HTML.