首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >车把:2个源,1个模板

车把:2个源,1个模板
EN

Stack Overflow用户
提问于 2016-01-13 21:18:50
回答 1查看 378关注 0票数 1

我有一个手柄模板,但是我想在这个模板中包含来自两个不同来源的变量。

代码语言:javascript
复制
<script id="notification-menu-item" type="text/x-handlebars-template">

我已经尝试让这两个源转到相同的模板id。这两个文件都有以下内容:

代码语言:javascript
复制
var source                 = $("#notification-menu-item").html();
var template               = Handlebars.compile(source);

但是只有一个源的变量通过模板。是否有一个模板从两个不同的来源获取它的{{variables}}

编辑:代码

这是模板:

代码语言:javascript
复制
<script id="notification-menu-item" type="text/x-handlebars-template">
    <div id="navmenucontainer" class="container">
        <div id="navmenuv">
            <ul class="nav">
              <li>Topics</li>
              <li>Help</li>
              {{#if logged_user}}
                <li>Notifications</li>
                {{#if pro}}
                <li>My Data</li>
                {{/if}}
              {{/if}}
              </ul>
        </div>
    </div>
</script>

pro来自一个.js文件,logged_user来自一个单独的.js文件。这两个变量是否都可以在同一个模板中使用?

EN

回答 1

Stack Overflow用户

发布于 2016-01-14 02:33:35

如果您想在将数据传递到Handlebars.compile()函数之前将数据组合起来,就必须将模板的呈现集中到一个函数中。我想您将不得不以某种方式保证这些“插件”js文件调用这个新函数的顺序。否则它会变成像这样的东西:

示例:

Class1.js

代码语言:javascript
复制
var source = $("#notification-menu-item").html();
var html = Notification.renderNotification(source, logged_user, undefined);
if (typeof html !== 'undefined') {
   $('body').prepend(html);
}

Class2.js

代码语言:javascript
复制
var source = $("#notification-menu-item").html();
var html = Notification.renderNotification(source, undefined, pro);
if (typeof html !== 'undefined') {
   $('body').prepend(html);
}

Notification.js

代码语言:javascript
复制
window.Notification = function() {
   var logged_user = undefined;
   var pro = undefined;
   return {
      renderNotification: function(source, user, isPro) {
         if (typeof user !== 'undefined') {
            logged_user = user;
         }

         if (typeof pro !== 'undefined') {
            pro = isPro;
         }

         if(typeof logged_user !== 'undefined' 
            && typeof pro !== 'undefined') {
               var template = Handlebars.compile(source);
               var html = template({logged_user: logged_user, pro: pro});
               return html;
         }
      }
}

显然,这是不优雅的,而且远不能维护。但是,我不知道具体的话语是如何运作的,我不知道该告诉你什么。在模板呈现时,应该传递一个包含所有相关数据的完整对象。随后对Handlebars.compile()的调用将需要完整的数据集。也许应该考虑找到一种方法将这些模板拆分并异步地呈现为单独的页面元素,或者查看部分数

免责声明:我不是JS或无逻辑模板方面的专家。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34777201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档