3

我试图弄清楚如何将参数传递到每个块中的子模板中,并在子模板中使用参数以及子模板助手。这是我到目前为止所尝试的:

模板:

<template name="parent">
{{#each nodes }}
{{> child myParam}}
{{/each}}
</template>

<template name="child">
{{ paramName }}
</template>

js:

Template.parent.nodes = function() { 
//return a list
};
Template.parent.myParam = function() {
return {"paramName" : "paramValue"};
};
Template.child.someOtherHelper = function() {
//How do I get access to the "paramName" parameter?
}

到目前为止,它还没有工作,而且似乎也弄乱了我的输入节点列表。
感谢帮助。

4

1 回答 1

8

使用时{{> child myParam}},它调用子模板并关联myParam为当前模板数据上下文,这意味着您可以在模板中引用{{paramName}}.

someOtherHelper你可以使用this.paramName来检索"paramValue". 但是,当您使用 时{{#each nodes}}{{> child}}{{/each}},这意味着您将当前列表项的内容(从 aLocalCursor或直接从数组项中获取)作为 child 的模板数据传递,您可以使用{{field}}in html 或this.fieldin引用列表项属性js。

这里发生的事情是当您调用时{{> child myParam}}myParam帮助程序内容将当前节点项覆盖为模板数据,这就是它弄乱您的节点列表的原因。

一个快速(肮脏)的技巧是简单地扩展myParam帮助程序,以便它还包含来自{{#each}}块的模板数据。

Template.parent.helpers({
  nodes:function(){
    // simulate typical collection cursor fetch result
    return [{_id:"A"},{_id:"B"},{_id:"C"}];
  },
  myParam:function(){
    // here, this equals the current node item
    // so we _.extend our param with it
    return _.extend({paramName:"paramValue"},this);
  }
});

Template.child.helpers({
  someOtherHelper:function(){
    return "_id : "+this._id+" ; paramName : "+this.paramName;
  }
});

<template name="parent">
  {{#each nodes}}
    {{> child myParam}}
  {{/each}}
</template>

<template name="child">
  {{! this is going to output the same stuff}}
  <div>_id : {{_id}} ; paramName : {{paramName}}</div>
  <div>{{someOtherHelper}}</div>
</template>

根据您要达到的目标,可能会有更好的方法,但至少可以完成这项工作。

于 2013-08-24T02:25:33.827 回答