GVKun编程网logo

handlebars.js – 把手动态部分块

11

本文将分享handlebars.js–把手动态部分块的详细内容,此外,我们还将为大家带来关于AngularJS和Handlebars–都需要或不需要、AngularJS和Handlebars-两者都是

本文将分享handlebars.js – 把手动态部分块的详细内容,此外,我们还将为大家带来关于AngularJS和Handlebars – 都需要或不需要、AngularJS和Handlebars-两者都是必需的、arrays – Handlebars.js – 从2D数组访问父索引、backbone.js – 从骨干视图重新渲染Handlebars的相关知识,希望对你有所帮助。

本文目录一览:

handlebars.js – 把手动态部分块

handlebars.js – 把手动态部分块

我有一个像这样的文件夹结构:

- components/
  - foo/
     - index.js
     - foo.handlebars
     - foo.scss
  - bar/
     - index.js
     - bar.handlebars
     - bar.handlebars

为了方便地解决组件部分,我提供了一个帮助器,它将找到正确的路径,将条形转换为组件/ bar / bar.handlebars.这个助手叫做getPartialForTemplate.

在我的模板中,我做:

{{> (getPartialForTemplate’foo’)some = props}}

这很好,但是当我需要将已解析的模板用作块时,我遇到了一个问题:

{{#> (getPartialForTemplate 'foo')}}
  <p>Some text here..</p>
{{/WHATGOESHERE???}}

这似乎是Handlebars中的语法缺陷,因为我希望它的语法功能能够协同工作.有没有办法做到这一点?

解决方法

在github上有一个 open issue,建议的解决方法是:

{{#>( lookup . 'intendedTemplate' )}}
  No template matched for "{{intendedTemplate}}"
{{/undefined}}

AngularJS和Handlebars – 都需要或不需要

AngularJS和Handlebars – 都需要或不需要

我需要知道如果AngularJS被用作前端的js框架,我们需要单独的模板引擎Handlebars吗? …在我的视图模板引擎功能可以使用AngularJS本身完成!
你是对的,把手和角在一起将是相当无用的。

把手和角是完全不同的东西。

Handlebars是一个模板引擎。你写一个花哨的templatey-string,给它一个JSON对象,它从数据中提取HTML。没有数据绑定,没有更新,它只是一次性的渲染。

AngularJS是一个HTML编译器和数据绑定器。 Angular将通过HTML查看角模板标签的HTML,解释/编译它们,并使用对给定控制器作用域上的数据的更改来更新HTML。 Angular不仅仅渲染HTML字符串一次,它编译HTML,将它绑定到一个范围,并且当该范围上的数据改变时更新。

Handlebars in one picture

AngularJS databinding/templating in one picture

AngularJS’s HTML compiler in one article

AngularJS’s whole overview/guide,so you can know how it actually works

AngularJS和Handlebars-两者都是必需的

AngularJS和Handlebars-两者都是必需的

我需要知道AngularJS是否用作前端的js框架,模板引擎是否需要单独的Handlebars?…就像我认为的那样,模板引擎功能可以使用AngularJS本身完成!

arrays – Handlebars.js – 从2D数组访问父索引

arrays – Handlebars.js – 从2D数组访问父索引

我在 JSON对象中有一个2D数组(称为table;)
data = {

tableID : "testTable",table : [
[{type:'a',value:'x'},{type:'a',value:'y'},value:'z'}],[{type:'a',value:'z'}]
]

};

并且已经使用模板成功地使用把手渲染它:

<table id = "{{tableID}}-table">

{{#each table}}

    <tr id = "{{../tableID}}-row-{{@index}}">

        {{#each this}}

            <td id = "{{../../tableID}}-row-{{../index}}-col-{{@index}}">

                {{this.type}}-{{this.value}}

            </td>

        {{/each}}

    </tr>

{{/each}}

</table>

但是,在td标记id中我似乎无法访问父索引
{{../ index}} – 行的索引.什么都没有返回:

<td id = "testTable-row--col-x">

但是,我可以访问当前上下文的索引{{@index}}.

有任何想法吗??

很多人提前感谢!!

丰富

附:使用1.0.0-rc.3

解决方法

这是车把上的一个开放式问题/功能.您可以检查相同 here的进度

但是,您可以检查解决方法here

backbone.js – 从骨干视图重新渲染Handlebars

backbone.js – 从骨干视图重新渲染Handlebars

我有一个视图,它持有句柄模板.
该模板由另一部分模板组成.
该部分模板包含我在应用程序的不同部分使用的结果列表.
无论如何,当尝试过滤结果时,我想只渲染那部分.意思是骨干视图不应该仅渲染整个视图.
可以做吗

解决方法

是的,这是可能的.最简单的方法是在渲染完整视图时执行整个模板,但只能在视图el中替换所需的部分.

就像是:

template: Handlebars.compile(templateHtml),render: function() {
  //let's say your render looks something like this
  this.$el.html(this.template(this.model.toJSON());
},renderList: function() {
  var html = this.template(this.model.toJSON());
  var selector = "#list";

  //replace only the contents of the #list element
  this.$el.find(selector).replaceWith($(selector,html));
}

根据模板的动态变化,您可能需要在替换列表后调用this.delegateEvents()才能使视图的事件正常工作.

根据评论编辑:

为了弄清楚,我在这里提出的方法再次执行视图的主手柄模板,但是不会再次渲染整个视图.

一步步:

>像正常渲染一样执行Handlebars模板功能.

var html = this.template(this.model.toJSON());

变量html现在包含一个HTML标记字符串.还没有呈现.
>为要重新呈现的元素定义一个选择器.

var selector = "#list";

>查找要替换的DOM元素.这假设您已经呈现了一次视图.否则,将在此$el中没有#list元素.

this.$el.find(selector)

>在模板化的html字符串中查找相应的元素,并用现有的元素替换新元素:

.replaceWith($(selector,html));

这只会替换当前在页面上的#list元素. #list以外的任何内容都不会以任何方式重新呈现或触摸.

我建议你这样做的主要原因,而不是单独执行和渲染部分模板是您的视图不需要知道模板和模板引擎的实现细节.所有它需要知道有一个元素#list.我相信这是一个更清洁的解决方案,并将您的模板细节与您的观点逻辑分开.

今天关于handlebars.js – 把手动态部分块的讲解已经结束,谢谢您的阅读,如果想了解更多关于AngularJS和Handlebars – 都需要或不需要、AngularJS和Handlebars-两者都是必需的、arrays – Handlebars.js – 从2D数组访问父索引、backbone.js – 从骨干视图重新渲染Handlebars的相关知识,请在本站搜索。

本文标签: