2013-12-11 4 views
0

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

Я пытаюсь загрузить элемент управления диаграммой на «прикрепленном» событии в модуле 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 модуля Vanilla Дюрандаль Стартер Кит:

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 для обработки этого вида элементов управления после отображения представления?

ответ

1

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

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

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