2015-05-21 3 views
1

Я пытаюсь собрать некоторые вложенные компоненты, чтобы собрать большую страницу. Использование промежуточных шагов для создания представления кажется излишним, но это только одна часть многих других компонентов, которые будут объединены. Кроме того, он дает хороший обзор того, что происходит. Но я не ошибаюсь.Вложенные компоненты с mithril.js

Вот пример кода

var MyApp = { 
    controller: function() { 
     return {loaded: true} 
    }, 
    view: function(ctrl) { 
     return //[ // remove comment for var1 
      m("button[type=button]", {onclick: function() {ctrl.loaded = false}}) 
      , ctrl.loaded ? MyComponent : "" 
      //] // remove comment for var1 
    } 
} 

var MyComponent = { 
    controller: function() { 
     return { 
      onunload: function() { 
       console.log("unloaded!") 
      } 
     } 
    }, 
    view: function() { 
     return m("h1", "My component") 
    } 
} 

var MainCompCtrl = function() { 
    var ctrl = this 
    ctrl.name = "test"; 
} 


var MainCompView = function(ctrl, args) { 

    var partComp = m.component(MyApp); 
    var part_myComp = m(".row", [ m(".col-md-2", [partComp]) ]); 

    var part5 = m("[id='2']", {class : 'commandContainer'}, "2", [part_myComp]); 
    return part5; 
}; 

// var1 working 
//m.mount(document.body, MyApp) 

// var2 not working 
m.mount(document.body, m.component(
     {controller : MainCompCtrl, view : MainCompView})); 

Вот скрипку с не рабочим вариантом var2: http://jsfiddle.net/1f7uauav/

Сообщение об ошибке:

TypeError: data is undefined 
if (data.subtree === "retain") return cached; 

Чтобы увидеть рабочую var1 удалите комментарий, как указано в скрипке (строки 6, 9, 42), и строки комментариев 45 и 46. Теперь вы можете увидеть желаемый результат, но таким образом я не могу используйте MyApp внутри других компонентов.

Итак, что не так с этим кодом в var2?

Спасибо, Стефан

ответ

1

Проблема решено, в JavaScript никогда не препятствовало возвращению последуют разрыв строки, как это:

return //[ // remove comment for var1 
    m("button[type=button]", {onclick: function() {ctrl.loaded = false}}) 
    , ctrl.loaded ? MyComponent : "" 
    //] // remove comment for var1 

Извините за это, Стефан

+2

Вы извинения к себе , или просто используя «Стефан» в качестве подписи? :) – lllllll