Дюрандаль Виджмо

Я пытаюсь использовать элемент управления диаграммой ComponentOne Wijmo в моем представлении Durandal.

Я пытаюсь загрузить элемент управления Chart для «прикрепленного» события в модуле js. Кажется, что элемент управления Chart не отображается, но вместо этого выдается следующая ошибка:

Uncaught TypeError: Cannot read property 'startX' of undefined jquery.wijmo-pro.all.3.20132.9.min.js:26
(anonymous function)jquery.wijmo-pro.all.3.20132.9.min.js:26
jQuery.event.dispatchjquery-1.9.1.js:3074
elemData.handlejquery-1.9.1.js:2750

Несмотря на то, что ошибка, по-видимому, вызвана сценариями элемента управления Wijmo, наиболее вероятно, что Durandal вызывает прикрепленное событие до отображения представления. Другими словами, во время инициализации в DOM нет макета.

Ниже приведен код, который я запускаю в модуле flickr ванильного набора Durandal Starter Kit:

attached: function() {
            $(document).ready(function () {
                $("#wijpiechart").wijpiechart({
                    radius: 140,
                    hint: {
                        content: function () {
                            return this.data.label + " : " + Globalize.format(this.value / this.total, "p2");
                        }
                    },
                    header: {
                        text: "Steam Mac Hardware Survey"
                    },
                    seriesList: [{
                        label: "MacBook Pro",
                        data: 46.78,
                        offset: 15
                    }, {
                        label: "iMac",
                        data: 23.18,
                        offset: 0
                    }, {
                        label: "MacBook",
                        data: 20.25,
                        offset: 0
                    }, {
                        label: "Mac Pro",
                        data: 5.41,
                        offset: 0
                    }, {
                        label: "Mac Mini",
                        data: 3.44,
                        offset: 0
                    }],
                    seriesStyles: [{
                        fill: "180-rgb(195,255,0)-rgb(175,229,0)",
                        stroke: "rgb(175,229,0)",
                        "stroke-width": 1.5
                    }, {
                        fill: "90-rgb(142,222,67)-rgb(127,199,60)",
                        stroke: "rgb(127,199,60)",
                        "stroke-width": 1.5
                    }, {
                        fill: "90-rgb(106,171,167)-rgb(95,153,150)",
                        stroke: "rgb(95,153,150)",
                        "stroke-width": 1.5
                    }, {
                        fill: "90-rgb(70,106,133)-rgb(62,95,119)",
                        stroke: "rgb(62,95,119)",
                        "stroke-width": 1.5
                    }, {
                        fill: "90-rgb(166,166,166)-rgb(149,149,149)",
                        stroke: "rgb(149,149,149)",
                        "stroke-width": 1.5
                    }]
                });     
            });
        }

Простым решением было бы перерисовать элемент управления после приведенного выше кода с задержкой:

setTimeout(function () {
                    $("#wijpiechart").wijpiechart("redraw");
                }, 100);

Но это, пожалуй, не элегантное решение.

Есть ли какое-либо другое событие в Durandal для обработки такого рода отрисовки элементов управления после отображения представления?


person user3092112    schedule 11.12.2013    source источник


Ответы (1)


Это было исправлено в последней версии 2.1. Филиал Дюрандаля. Вот цитата из @EisenbergEffect https://github.com/BlueSpire/Durandal/issues/406#issuecomment-30340696

Ok. Сначала вытащите последний код из ветки Version-2.1.0. Я только что отправил исправление ошибки для входного перехода, который нарушал измерение элемента в прикрепленном обратном вызове. После обновления повторите попытку с кодом и дайте мне знать, решит ли это проблему для вас.

Кроме того, вам не нужно использовать готовый документ jQuery внутри Durandal. Durandal не выполняет код приложения до тех пор, пока он не будет готов. Так что не стоит об этом беспокоиться.

person RainerAtSpirit    schedule 11.12.2013