Установка значения (выбранная опция) виджета dijit.form.Select

Вопрос, который у меня был у меня, был: «Если я вызову библиотечный код N методов глубоко и хочу пространство имен проекта - например, приложение MVC, которое действительно работает, - как это получить?»

Немного взломанный, но вы можете просто захватить стек и трафик:

    public static string GetRootNamespace()
    {
        StackTrace stackTrace = new StackTrace();
        StackFrame[] stackFrames = stackTrace.GetFrames();
        string ns = null;
        foreach(var frame in stackFrames)
        {
            string _ns = frame.GetMethod().DeclaringType.Namespace;
            int indexPeriod = _ns.IndexOf('.');
            string rootNs = _ns;
            if (indexPeriod > 0)
                rootNs = _ns.Substring(0, indexPeriod);

            if (rootNs == "System")
                break;
            ns = _ns;
        }

        return ns;
    }

Все это делается, это получение stacktrace, запуск методов из последнего вызова root и фильтрация для System , Когда он найдет системный вызов, он знает, что он зашел слишком далеко и возвращает вам пространство имен непосредственно над ним. Если вы используете модульный тест, приложение MVC или службу, системный контейнер будет сидеть на 1 уровень глубже корневого пространства имен вашего проекта, поэтому voila.

В некоторых сценариях, где Системный код является промежуточным (например, System.Task) по трассировке, который возвращает неверный ответ. Моя цель состояла в том, чтобы взять, например, некоторый код запуска и позволить ему легко найти класс или контроллер или что-то еще в корневом пространстве имен, даже если код, выполняющий работу, выйдет в библиотеке. Это выполняет эту задачу.

Я уверен, что это может быть улучшено. Я уверен, что этот хакерский способ сделать что-то может быть улучшен во многих отношениях, и улучшения приветствуются.

14
задан aehlke 7 February 2010 в 06:37
поделиться

3 ответа

Даже если ваши значения - целые числа, если вы установите целое число в строку, это сработает.

dijit.byId( 'my_select' ).attr( 'value', String( 5 ) );
15
ответ дан 1 December 2019 в 09:32
поделиться

Репост моего комментария: Здесь есть тестовая страница: архив додзё , с которой вы можете повозиться. Используя fire-bug, я успешно использовал dijit.byId ('s9'). Attr ('value', 'CO') на этой странице. Это установит на этой странице выбор "на основе магазина".

Но, как вы сказали, я установил его с помощью строки, а вы использовали целые числа, поэтому я не заметил ошибки. Хороший улов.

2
ответ дан 1 December 2019 в 09:32
поделиться

Оказалось, что это ошибка - если значения опций не строки, это не работает (у меня были целые числа).

11
ответ дан 1 December 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: