我试图在空格键中编写自定义迭代器(我使用meteor 1.1.3)。迭代器是一个顺序的for循环(基本上是在需要时替换我对#each的使用,因为我相信#each在迭代中不能保证顺序)。
我尝试了以下内容:
在lib中 -
UI.registerHelper 'sequentialFor', () ->
ret = ""
for i in [0...@.length]
id = @[i]
ret = ret + Template.noop
ret
noop.html -
<template name="noop">
{{> UI.contentBlock this}}
<template>
main.html -
{{#sequentialFor ids}}
<div id="wow-{{this}}">stuff</div>
{{/sequentialFor}}
上面的ids是从主要模板助手之一传递的字符串数组。
现在它抱怨我的UI帮助器的返回是[object Object] [object Object]。 为了理智,我知道如果我用以下代码替换我的UI助手:
UI.registerHelper 'sequentialFor', () ->
//ret = ""
//for i in [0...@.length]
// id = @[i]
// ret = ret + template
id = @[0]
Template.noop
我知道我的main.html中的div会根据需要显示相应的id作为其id属性的一部分。但是,我似乎无法使for循环工作。
我不能直接从帮助器返回main.html中的div,因为我需要用我的新迭代器包装很多div,每个div都有非常不同的属性。
我想简单的问题是,如何在空格键中定义自己的块迭代器(类似于#each)?
更难的问题可能是,我上面的方法出了什么问题?
我考虑过各种各样的资源,但只发现以下内容非常有帮助: How to pass an object from to a block helper back to the block in meteor blaze? https://github.com/meteor/meteor/wiki/Using-Blaze https://github.com/meteor/meteor/blob/devel/packages/spacebars/README.md Iterating over basic “for” loop using Handlebars.js
注意我正在使用coffeescript
答案 0 :(得分:1)
我设法使用类似于你在Haskell或Lisp中使用的递归技术来获得一个自定义迭代器:
<body>
{{#countdown n=5}}
<p>item {{this}}</p>
{{/countdown}}
</body>
<template name="countdown">
{{#if positive}}
{{> Template.contentBlock n}}
{{#countdown n=nMinusOne}}
{{> Template.contentBlock this}}
{{/countdown}}
{{/if}}
</template>
Template.countdown.helpers({
positive: function () {return this.n > 0;},
nMinusOne: function () {return this.n - 1;}
});
请参阅meteorpad。
表现可能比通常的{{#each}}
差得多。
答案 1 :(得分:0)
在我看来,你想为每个ID数组创建一个<div>
(如果我错了,请纠正我)。这就是我要做的,没有必要的自定义迭代器:
Template.registerHelper('ids', function(arrayWithIds) {
if (!arrayWithIds) return [];
// do some sorting or whatever with arrayWithIds, for example:
var arrayOfIds = _.map(arrayWithIds, function(obj) {
return obj._id;
});
return arrayOfIds;
});
然后在main.html中:
{{#each ids someDataSetWithIds}}
// `someDataSetWithIds` is the helper's parameter
// `this` in each case is an ID
<div id="wow-{{this}}"></div>
{{/each}}
如果你的助手返回一个对象,你可以在模板中使用this._id
。我误解了你想要实现的目标吗?