2014-10-29 189 views
1

我有幾個組件,每個組件都有一個模板,我如何爲餘燼組件分配一個通用模板?如何爲餘燼組件分配一個通用模板

+0

在這種情況下,爲什麼你有幾部分組成?你可以有一個組件。對 ?你可以給你的代碼提供你想要做的jsbin嗎? – Susai 2014-10-29 08:10:46

+0

嗯,通過指定相同的模板名稱? – 2014-10-29 08:12:28

+0

@Susai看起來很奇怪,但我願意接受,可能會出現這樣的情況:兩個邏輯方面不同的組件可能在某種程度上有用地共享相同的模板。 – 2014-10-29 08:14:40

回答

1

要使組件之間公共的模板我可能會執行下列操作中的一個,

  1. 繼承從另一個,或從一個基地一個部件延長layoutName屬性

例1: http://emberjs.jsbin.com/jewohekiwu/1/edit?html,js

  • 使用共同partial輔助
  • 例2:http://emberjs.jsbin.com/helefevome/1/edit?html,js

    還具有繼承的製品沒有layoutName屬性和一個公共部分http://blog.yanted.com/2014/01/17/inheritance-with-ember-js-components/

    例1 HBS

    <script type="text/x-handlebars" data-template-name="index"> 
        {{my-comp1 testProp="lala"}} 
        <br/> 
        {{!other-name-for-comp2 testProp="lolo2"}} 
        {{my-comp2 testProp="lolo"}} 
        </script> 
        <script type="text/x-handlebars" data-template-name="components/my-comp1"> 
        comp1 - testProp:{{testProp}} 
        </script> 
    

    JS

    App.MyComp1Component = Em.Component.extend({ 
        layoutName:"components/my-comp1", 
        test:function(){console.log("comp1");console.log(this.get("testProp"));}.on("init") 
    }); 
    
    
    App.MyComp2Component = App.MyComp1Component.extend({ 
        test:function(){console.log("comp2");console.log(this.get("testProp"));}.on("init") 
    }); 
    
    //Em.Handlebars.helper("other-name-for-comp2", App.MyComp2Component); 
    

    例題 HBS

    <script type="text/x-handlebars" data-template-name="index"> 
        {{my-comp1 testProp="lala"}} 
        <br/> 
        {{my-comp2 testProp="lolo"}} 
        </script> 
        <script type="text/x-handlebars" data-template-name="components/my-comp1"> 
    {{partial "_commonTemplate"}} 
        </script> 
        <script type="text/x-handlebars" data-template-name="components/my-comp2"> 
        {{partial "_commonTemplate"}} 
        </script> 
    
        <script type="text/x-handlebars" data-template-name="_commonTemplate"> 
        comp1 - testProp:{{testProp}} 
        </script> 
    

    JS

    App.MyComp1Component = Em.Component.extend({ 
        test:function(){console.log("comp1");console.log(this.get("testProp"));}.on("init") 
    }); 
    
    
    App.MyComp2Component = Em.Component.extend({ 
        test:function(){console.log("comp2");console.log(this.get("testProp"));}.on("init") 
    }); 
    
    +1

    第一種方法是爲我工作。但是我的組件是相互獨立的,所以我通過js文件中的layoutName屬性爲每個組件指定了一個通用模板。 – wupeng 2014-10-30 02:35:39