Re[8]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 12.08.12 09:47
Оценка: 1 (1) +1
Здравствуйте, 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 — это тоже грубо говоря "низкоуровневая зависимость от стороннего фреймворка".
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[9]: Сделал прототип Веб фреймворка для Немерле
От: dotneter  
Дата: 12.08.12 10:37
Оценка:
Здравствуйте, 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?
Rojac v0.1 / rev. 899
Talk is cheap. Show me the code.
Re[6]: Сделал прототип Веб фреймворка для Немерле
От: catbert  
Дата: 13.08.12 07:11
Оценка: +1 -2
Здравствуйте, VladD2, Вы писали:

VD>Это называется — протекающая абстракция.


Не-а, протекающая абстракция это когда тебе нужно сгенерить какой-то джаваскрипт, но фреймворк на такое (из-за архитектурных ограничений) не способен, а кастомный джаваскрипт вставлять не дает по идеологическим причинам.
http://nemerle.org/banners/?t=%20catbert%20
Re[7]: Сделал прототип Веб фреймворка для Немерле
От: WolfHound  
Дата: 13.08.12 08:13
Оценка: +1
Здравствуйте, catbert, Вы писали:

VD>>Это называется — протекающая абстракция.

C>Не-а, протекающая абстракция это когда тебе нужно сгенерить какой-то джаваскрипт, но фреймворк на такое (из-за архитектурных ограничений) не способен,
Значит нужно дорабатывать фреймворк.
Но у меня есть очень большие сомнения, что оно нужно не по тому, что так хочется, а по тому, что оно действительно нужно.

C>а кастомный джаваскрипт вставлять не дает по идеологическим причинам.

Нет. Это именно протекающая абстракция.
То, что ты хочешь всё равно, что хотеть писать посреди C# на х86ом ассемблере.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 16.08.12 16:44
Оценка: 153 (1)
Почти доделал макрос для предсавлений, который разбирает все выражения внутри вьюхи и генерирует валидную knockoutjs разметку.
Выглядит это примерно так:
<div>
    <h2>Your seat reservations (<span>$(Seats.Count())</span>)</h2>
    <table>
        <thead><tr>
            <th>Passenger name</th><th>Meal</th><th>Surcharge</th><th></th>
        </tr></thead>
        <tbody>
            <tr $foreach(s in Seats)>
                <td><input value="$(s.Name)" /></td>
                <td><select options="$AvailableMeals" data-bind="value: Meal" data-bind="optionsText: 'MealName'"></select></td>
                <td>$(s.FormattedPrice)</td>
                <td><a href="#" click="$RemoveSeat">Remove</a></td>
            </tr>    
        </tbody>
    </table>

    <button click="$AddSeat" enable="$(Seats.Count() < 5)">Reserve another seat</button>

    <span $when(Seats.Count() < 3)>
      Less than 3
    </span>

    <h3 visible="$(TotalSurcharge > 0)">
        Total surcharge: <span>$TotalSurcharge</span>
    </h3>
</div>


То есть пишем по привычке, как будто просто хотим подставить значение, а на деле генерируются нужные аттрибуты и теги. Всё это дело проверяется компилятором, так что большинство ошибок отлавливается в компайл-тайм.
Пока не решил, как записывать выражения вроде:
data-bind="options: $root.availableMeals, value: meal, optionsText: 'mealName'"

Так что сейчас там грязный хак, который основан на том, что несколько одинаковых атрибутов объединяются в один со значениями разделёнными запятыми.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: Сделал прототип Веб фреймворка для Немерле
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.12 20:29
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Почти доделал макрос для предсавлений, который разбирает все выражения внутри вьюхи и генерирует валидную knockoutjs разметку.


Комплит и хинты работают?
I>Пока не решил, как записывать выражения вроде:
I>
I>data-bind="options: $root.availableMeals, value: meal, optionsText: 'mealName'"
I>

I>Так что сейчас там грязный хак, который основан на том, что несколько одинаковых атрибутов объединяются в один со значениями разделёнными запятыми.

В чем проблема? Зачем какие-то хаки?

Еще логично было бы вместо ":" использовать "=" в качестве разделителя.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 17.08.12 07:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Комплит и хинты работают?

Тут мне видимо понадобится помощь. Хинты работают, но разъезжаются. И видимо по этой же причине не работает комплит. Я там просто очень сильно всё перелопатил, и пока ещё не успел занятся локейшенами.

I>>Так что сейчас там грязный хак, который основан на том, что несколько одинаковых атрибутов объединяются в один со значениями разделёнными запятыми.

VD>В чем проблема? Зачем какие-то хаки?
Суть в том, что мне одним выражением надо задать три свойства. Как сделано сейчас:
<select options="$AvailableMeals" data-bind="value: Meal" data-bind="optionsText: 'MealName'">

data-bind атрибуты это просто текстовые значения, они никак не парсятся, только в самом конце объединяются в один атрибут. А нужно сделать что-то вроде:
<select options="$AvailableMeals.Options(s.Meal, //"value: Meal" -- Значение 's' приходит из цикла
                                         meal => meal.MealName)" /> //optionsText: 'MealName'

Это всё, конечно, очень условно, но проблему отражает.

VD>Еще логично было бы вместо ":" использовать "=" в качестве разделителя.

А оно так и есть, там где используется ":", это текстовые атрибуты на данный момент.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[4]: Сделал прототип Веб фреймворка для Немерле
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.12 07:48
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Тут мне видимо понадобится помощь. Хинты работают, но разъезжаются. И видимо по этой же причине не работает комплит. Я там просто очень сильно всё перелопатил, и пока ещё не успел занятся локейшенами.


Когда парсишь подвыражения (компилятором), надо корректно задавать начальный локешон. Тогда все будет ОК.

I>Суть в том, что мне одним выражением надо задать три свойства. Как сделано сейчас:

I>
I><select options="$AvailableMeals" data-bind="value: Meal" data-bind="optionsText: 'MealName'">
I>

I>data-bind атрибуты это просто текстовые значения, они никак не парсятся, только в самом конце объединяются в один атрибут. А нужно сделать что-то вроде:
I>
I><select options="$AvailableMeals.Options(s.Meal, //"value: Meal" -- Значение 's' приходит из цикла
I>                                         meal => meal.MealName)" /> //optionsText: 'MealName'
I>


Что-то как-то сложнее оригинала.

И что это дело означает? Что за Options? Что за s?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 17.08.12 08:36
Оценка:
Здравствуйте, 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. Псевдокод примерно такой:

def reservation = SeatReservation();
def select = Select() <- (value = binding(reservation.Meal);
foreach(meal in AvailableMeals) {
  def option = Option() <- (optionsText = binding(meal.MealName))
  select.options.Add(option);
}


Для того, чтобы в разметке получить интеллисенс для MealName, макрос должен знать из какой коллекции берётся текущее значение. Поэтому meal => meal.MealName (повторюсь, это только иллюстрация).
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 20.08.12 17:11
Оценка:
Две новости:
1. К проекту присоединился NN, будем развивать фреймворк и параллельно делать большой сэмпл проект
2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: Сделал прототип Веб фреймворка для Немерле
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.12 23:02
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Две новости:

I>1. К проекту присоединился NN, будем развивать фреймворк и параллельно делать большой сэмпл проект

Здорово!

I>2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/


Как-то без исходников и пояснений это все не о чем.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 21.08.12 06:33
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/

VD>Как-то без исходников и пояснений это все не о чем.

Не хватает на всё времени. Исходники можно посмотреть самому тут: https://github.com/ionoy/NemerleWeb/tree/master/MVCTest/MVVM

Уже почти доделана поддержка встраевамых шаблонов. Как только будет более менее окончательный вариант, то можно будет написать небольшую статью-описание.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[4]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 21.08.12 14:09
Оценка: 183 (4)
Добавил показ исходников и дописал движок представлений. Теперь весь рендеринг статически типизирован. (пока кроме options)
http://user1663.netfx45lab.discountasp.net/
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[2]: Сделал прототип Веб фреймворка для Немерле
От: _Claus_  
Дата: 21.08.12 14:50
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Две новости:

I>1. К проекту присоединился NN, будем развивать фреймворк и параллельно делать большой сэмпл проект
I>2. Зарегили бесплатный хостинг, можно посмотреть сэмплы вживую http://user1663.netfx45lab.discountasp.net/

есть просьба от web-танкистов. что нужно прочитать, чтобы понять, как с этим работать после winforms?
Re[3]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 21.08.12 14:59
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>есть просьба от web-танкистов. что нужно прочитать, чтобы понять, как с этим работать после winforms?


На сайте нокаута есть отличные туториалы, которые раскрывают всю суть MVVM — http://learn.knockoutjs.com/
А для затравки можно посмотреть небольшое видео презентацию от автора библиотеки, Стивена Сандерсона — http://channel9.msdn.com/Events/MIX/MIX11/FRM08

Когда в голове будет чёткое понимание, что такое MVVM в вебе и как его использовать, то можно начинать смотреть исходники сэмплов нашего фреймворка. Это, собственно, те же самые туториалы, только переведённые на Немерле. АПИ ещё далеко не окончательный, так что на него не стоит опираться, но уже как минимум можно посмотреть, как это всё дело работает.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[4]: Сделал прототип Веб фреймворка для Немерле
От: Аноним  
Дата: 21.08.12 15:23
Оценка:
Здравствуйте, ionoy, Вы писали:

Скрипт выполняется на клиенте? Процедуры валидации есть? Темы будут?
Re[5]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 21.08.12 16:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скрипт выполняется на клиенте?

Да, на сервере генерируется HTML/Javascript, выполняются они на клиенте.

A>Процедуры валидации есть?

Смотря что подразумевается под валидацией. Если валидность введённых данных (required поля, длина строки и тд), то нет, встроенных механизмов пока нет. Но:
1. Никто не мешает использовать общедоступные механизмы, например, jquery.validation, DataAnnotations и т.д.
2. Очевидно надо будет сделать встроенную валидацию, однако это далеко не на первом месте

A>Темы будут?

Опять же, смотря что под ними подразумевается. Контролов то у нас нет, чистый HTML.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Re[5]: Сделал прототип Веб фреймворка для Немерле
От: WolfHound  
Дата: 21.08.12 16:18
Оценка:
Здравствуйте, ionoy, Вы писали:

I>Добавил показ исходников и дописал движок представлений. Теперь весь рендеринг статически типизирован. (пока кроме options)

I>http://user1663.netfx45lab.discountasp.net/
Этот пример не работает.
http://user1663.netfx45lab.discountasp.net/Home/Introduction
Похоже проблема в этой строчке.
 <p>First name: <strong>$(FirstName.Length)</strong></p>
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Сделал прототип Веб фреймворка для Немерле
От: Аноним  
Дата: 21.08.12 16:41
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Этот пример не работает.

Работает
Re[6]: Сделал прототип Веб фреймворка для Немерле
От: ionoy Эстония www.ammyui.com
Дата: 21.08.12 16:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Этот пример не работает.

WH>http://user1663.netfx45lab.discountasp.net/Home/Introduction
WH>Похоже проблема в этой строчке.
WH>
WH> <p>First name: <strong>$(FirstName.Length)</strong></p>
WH>


Блин, дебужные данные остались Уже исправлено всё.
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.