2016-02-29 2 views
1

Я пытаюсь добавить компонент Eshop_pane "в некоторый div. Компонент Eshop_panel находится в другом внешнем скрипте, поэтому я добавляю эту часть скрипта с $.getScript, но этот компонент не будет отображаться. ? яMithril.js - getScript

m("div.fr", [ 
    m("div", {class: ctrl.uid}), 
    $.getScript("some_panel.js").done(function(script) { 
     m.component(Eshop_panel, {}) 
    }) 
]) 

//some_panel.js 
var Eshop_panel = { 
    view: function() { 
     return [ 
      m("div", "Hello world!"), 
     ] 
    } 
}; 
+0

'$ .getScript' - это метод jQuery ... не функция Мифрила. Включили ли вы jQuery? Что говорит вам консоль? – rnevius

+0

Вместо того, чтобы загружать компонент 'Eshop_panel' через функцию' getScript', вы должны потребовать его как модуль с помощью такого инструмента, как браузер. Если вы хотите загрузить внешний файл так, как вы его уже делаете, вы должны поместить вызов 'getScript' на контроллер (это лучше на модели, если оно у вас есть), а затем вызвать' m.redraw' на обратном вызове 'done', что делает компонент' Eshop_panel' доступным в представлении (например, 'ctrl.panel_component') с помощью getter/setter, который должен быть инициализирован« null »во время загрузки скрипта. – Vier

ответ

0

Одним из вариантов было бы загрузить сценарий, прежде чем какой-либо из соответствующего кода фактически выполняется, например:

$.getScript("some_panel.js").done(function(script) { 
    m.mount(someElem, { // Ie, don't actually do the mount until everything's ready 
    view: function() { 
     return m("div.fr", [ 
     m("div", {class: ctrl.uid}), 
     m.component(window.Eshop_panel, {}) 
     }) 
     ]) 
    } 
    }) 
}) 

Или другой вариант может быть, чтобы отобразить заполнитель, пока не будет загружен скрипт :

$.getScript("some_panel.js").done(function(script) { 
    m.redraw()  
}) 
... 
m("div.fr", [ 
    m("div", {class: ctrl.uid}), 
    typeof window.Eshop_panel === 'undefined' ? 'Loading...' : m.component(Eshop_panel, {}) 
]) 

(Я бы предложил изучить такие инструменты, как AMD или Browserify (и т. Д.), Чтобы помочь в этом сценарии. то есть я не сделал бы этого так лично, но это может быть самый простой вариант для того, чего вы пытаетесь достичь.)

Смежные вопросы