nemerleweb

Официальный русскоязычный блог проекта NemerleWeb www.nemerleweb.com

21.09.2015
ionoy
Мобильный RSDN.
Будем рады замечаниям и улучшениям, а еще больше помощи
23.05.2013
ionoy
Помнится, Влад предлагал сделать на NemerleWeb новое дерево/меню для rsdn.ru.

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

Если кому интересно, посмотреть можно здесь: http://m.rsdn.ru
Самое интересное — это код. Вся структура меню состоит из трёх Unit'ов

1. MainPage https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/MainPage.n
Здесь рендерится общая структура страницы: левая часть (поиск, прикреплённые ветки, меню) и правая, которая содержит iframe для страниц rsdn.

2. TreeNode https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/TreeNode.n
Собственно, нода.
24.08.2012
ionoy
Страница проекта: http://nemerlewebsamples.apphb.com
Репозиторий: https://github.com/NemerleWeb/NemerleWeb

Все важные обновления будут поститься в этой теме. Здесь же можно постить свои вопросы и предложения/замечания.
30.07.2013
ionoy
Голосование тут: http://rsdn.ru/poll/3928
22.06.2013
_NN_
Как оказалось тема не освещена совсем.
А между тем вопрос был поднят давно.

Предисловие

Итак простой способ вызова JS это макрос с очевидным названием 'js'.
Используется очень просто:

[Unit]
class MyPage
{
  public F() : void
  {
    js <# window.alert("abc"); #>
  }
}


Очевидно, что никакой типизацией и проверками ошибок не пахнет.
Создать юнит с именем window и методом alert не пройдет, т.к. NemerleWeb не обязан (и не генерирует) такой же код как должен быть для вызова JS.
Будет что-то вроде: window.alert["System.String"]("abc").

Типизация JS

Для этой цели используется простой макрос JSApi:
К примеру возьмем тот же window.alert:
[JSApi]
class window
{
  public static alert(s : string) : void {}
}

Проще некуда.
Теперь мы можем писать в юните код на немерле и быть уверенным , что позовем правильно функцию.
[nemerle]
[Unit]
class MyPage
{