2013-07-19 73 views
2

我得到了一些與marionette.js的問題,並花了幾個小時看錯誤源,但我找不到它,我的佈局沒有正確渲染其模板,它只是渲染元素在模板的第一個div內。Marionette.js只佈局渲染模板的單個元素

這裏是實際的模板,headerlayout.html:

<div class="header-logo-bg relative" id="header_logo"> 
     <a href="/" title="Apps Title"> 
      <div class="logo"></div> 
     </a> 
    </div> 

    <div id="home_btn"> 
     <a href="/"> 
      <div class="back_to_all_modules"> 
       Back to<br> 
       All Modules 
      </div> 
     </a> 
    </div> 


    <div class="header_menu" id="header_menu"> 

    </div> 

,但呈現的結果是隻有這樣的:

<div> 
<a href="/" title="Apps Title"> 
    <div class="logo"></div> 
</a> 

這裏是我的骨幹佈局:

define([ 
    'marionette', 
    'modules/header/views/menulayout', 
    'tpl!modules/header/templates/headerlayout.html' 
], function (Marionette, MenuLayout, layoutTemplate) { 


    var HeaderLayout = Backbone.Marionette.Layout.extend({ 
     template: layoutTemplate, 

     regions: { 
      menuRegion: '#header_menu' 
     }, 
     initialize: function() { 
      console.log('initializing header layout'); 
     }, 
     onRender: function() { 
      console.log('onRender headerlayout'); 
      var menuLayout = new MenuLayout(); 
      this.menuRegion.show(menuLayout); 
     } 
    }); 

    return HeaderLayout; 
}); 

這裏是我的標題佈局從骨幹應用程序調用:

define([ 
    'marionette', 
    'modules/header/views/headerlayout' 
], function (Marionette, HeaderLayout) { 

    // set up the app instance 
    var myApp = new Backbone.Marionette.Application(); 

    // configuration, setting up regions, etc ... 
    myApp.addRegions({ 
     header: '#header', 
     content: '#content', 
     footer: '#footer', 
     dialog: '#dialog' 
    }); 

    myApp.addInitializer(function() { 
     var headerLayout = new HeaderLayout(); 
     myApp.header.show(headerLayout); 
    }); 

    // export the app from this module 
    return myApp; 
}); 

我在這裏想念什麼?任何幫助將不勝感激,謝謝。對於我可憐的英語感到抱歉。

+0

我看不出有任何問題與您的代碼,也許這是你的模板中的一些錯誤,一個奇怪的字符編碼可能? – Ingro

+0

@Ingro是的,你是對的,代碼沒有錯,錯誤源位於requirejs配置文件。 – ruwhan

+0

我們有完全相同的問題....什麼是修復? – Bingy

回答

0

在您的佈局中,嘗試使用onShow替代onRender函數。

0

啊哈。

已經解決了。

木偶正在期待模板對象,而不是文本模板。因爲你給它一段文字而不是一個對象。是的,你的代碼應該可以工作..但是我們也有同樣的問題,並沒有使用tpl!我們正在使用文本的功能!

這將工作:

define(['underscore' 
    'marionette', 
    'modules/header/views/menulayout', 
    'text!modules/header/templates/headerlayout.html' 
], function (_,Marionette, MenuLayout, layoutTemplate) { 


    var HeaderLayout = Backbone.Marionette.Layout.extend({ 
     template: _.template(layoutTemplate),