2016-12-22 5 views
1

背景ストーリー:私はjsファイル構造になっていて、ハンドルバーテンプレートを取得してそれを(ハンドルバーのスタイルガイドツール、ファブリケーターによって使用される)ヘルパを構築しています。jsファイル構造体、戻り値?

私のreturnTemplate()関数は未定義を返し、私はその理由を理解できませんか? それはrenderTemplate()に入りますが、そのことは行いますが、戻り値はボタンクリックまですべて移動しません。

jsfiddle

var Button = (function() { 
    function init() { 
    $('.js-template-trigger').on('click', function() { 
     var context = { 
     name: 'John Wick' 
     } 

     var value = TemplateHelper.returnTemplate('demo-template', context); 
     console.log('value:', value); 
    }); 
    } 

    return { 
    init: init 
    }; 
})(); 

$(function() { 
    Button.init(); 
}); 


var TemplateHelper = (function() { 
    function getTemplate(templateId, callBack, context) { 
    //$.get('/data/templates.html#' + templateId).done(callBack); 
    console.log('what is:', $('#demo-template')[0].outerHTML); 

    callBack($('#demo-template')[0].outerHTML); 
    } 

    function renderTemplate(source, context) { 
    console.log('renderTemplate'); 

    var template = Handlebars.compile(source); 
    var html = template(context); 

    console.log('renderTemplate html:', html); 
    console.log('renderTemplate html inner:', $(html).html()); 

    return $(html).html(); 
    } 

    function returnTemplate(templateId, context) { 
    var callBack = function(data) { 
     renderTemplate(data, context); 
    } 

    return getTemplate(templateId, callBack, context); 
    } 

    function appendToTemplate(templateId, context, targetAppend) { 
    var callBack = function(data) { 
     if (data !== undefined) { 
     var html = renderTemplate(source, context); 
     $(html).appendTo($(targetAppend)); 
     } 
    } 

    getTemplate(templateId, callBack, context); 
    } 

    return { 
    returnTemplate: returnTemplate 
    }; 
})(); 

HTML

<button type="button" class="js-template-trigger">click me</button> 

    <script id="demo-template" type="text/x-handlebars-template"> 
     <div style="height: 50px; width: 100%; background-color: deepskyblue;">{{name}}</div> 
    </script> 

答えて

1

機能あなたの関数getTemplateが何かを返す場合returnTemplateが何かを返します。したがって、指示callBack($('#demo-template')[0].outerHTML);の前にreturnを追加することができます。同様に、コールバック関数は、renderTemplate(data, context);(varコールバックの定義内)の指示の前に、returnを返します。

+0

驚くばかりです。私はそれを試みたが、コールバックの定義に追加することができなかった。ありがとう。 –

+0

しかし、私が '$ .get();'を返すと、私は値を取得するのではなく、関数全体を取得するだけで、どのように値を抽出するのですか? –

+0

'$ .get()'は非同期なので、値を即座に取得することはできません(また、戻り値は、あなたが発見した関数です)。私はあなたが望むことができる約束を見なければならないと思う:ちょうどここに行くhttps://davidwalsh.name/promises – BNilsou

関連する問題