суббота, 4 мая 2013 г.

Bootstrap typeahead и объекты

Как бы не хотелось вернуть в source сразу объекты и просто задать правильно функции highlighter, matcher, updater и sorter, ничего не выйдет. Не выйдет, так как Bootstrap запихивает объекты в атрибут data-value и там они превращаются в строки, и в конце updater получает не объект, а "[Object object]".
Порывшись в гуголе нашёл только предложения хранить массив строк с JSON объектами и при необходимости парсить их. Ещё нашёл решение (Twitter Boostrap Typeahead Tutorial) хранить в typeahead массив идентификаторов объектов и при необходимости обращаться за объектом к глобальной коллекции. Отличное решение, если коллекция одна и статическая, с ajax такое не сработает. Отталкиваясь от него сделал своё решение. В нём в экземпляре typeahead создаётся поле с коллекцией объектов. Вот оно:
HTML:
<input autocomplete="off" class="selector" data-id-input="#QuestionID" data-link="@Url.Action(MVC.Play.QuestionTypeahead())" name="Question_Selector" type="text" />
<input id="QuestionID" name="QuestionID" type="hidden" />
JS:
    $('.selector').typeahead({
        source: function (query, process) {
            var idInput = this.$element.data().idInput;
            var that = this;
            return $.post(this.$element.data().sourceUrl, { query: query }, function (data) {
                var selectorData = {};
                for (i in data) {
                    var item = data[i];
                    selectorData[item.id] = item;
                }
                that.selectorData = selectorData;
                return process($.map(data, function (item) { return item.id }));
            });
        },
        matcher: function (id) {
            return true;
        },
        highlighter: function (id) {
            return this.selectorData[id].title;
        },
        updater: function (id) {
            var idInput = this.$element.data().idInput;
            if (idInput != null)
                $(idInput).val(id);
            return this.selectorData[id].title;
        },
        sorter: function (items) {
            return items;
        }
    });
JSON от сервиса:
[{"id":26,"title":"Был ли ваш персонаж главой СССР?"},{"id":364,"title":"Ваш персонаж становился народным артистом СССР либо России?"}]

Как через код создать стиль, который устанавливает параметр StrokeDashArray в WPF

Убил на эту хрень очень много времени. Спасибо большое товарищу написавшему этот пост Setting the StrokeDashArray using a Style in Silverlight.
В двух словах. Вместо логичного решения
ellipse2Style.Setters.Add(new Setter(Ellipse.StrokeDashArrayProperty,new DoubleCollection() { 2, 2 }));
надо делать так
ellipse3Style.Setters.Add(new Setter(Ellipse.StrokeDashArrayProperty, "2,2"));