在Meteor.JS Handlebars中将对象转换为数组后无法拆分字符串

时间:2013-11-20 15:19:13

标签: javascript node.js meteor handlebars.js

Handlebar助手arrarify用于将对象对象转换为对象数组

handlebarsHelper.js

Handlebars.registerHelper('arrayify',function(obj){
    result = [];
    for (var key in obj) result.push({name:key,value:obj[key]});
    return result;
});

客户端/视图/ main.html中

<template name="orderList">
    {{#each arrayify orderList}}
        {{value.amount}} {{ value.name }}
    {{/each}}
</template>

客户端/视图/ main.js

Template.orderList.orderList = function() {
    // Retrieved from Collection
    orderList = {
        12345: {name: "apples_mackintosh", amount: 10},
        12346: {name: "oranges_sunkiss", amount:5}
    };

    return orderList;
};

问题:如何将模板值oranges_sunkiss呈现为orangesapples_mackintosh' as 'apples?我尝试使用.split('_')[0],但Meteor抛出错误

客户端/视图/ main.html中

<template name="orderList">
    {{#each arrayify orderList}}
        {{value.amount}} {{ value.name.split('_')[0] }}
    {{/each}}
</template>

错误

While building the application:
client/views/main.html:63: Parse error:
...unt}} {{ value.name.split('_')[0] }} @ {
-----------------------^
Expecting 'ID', got 'INVALID'

2 个答案:

答案 0 :(得分:2)

我相信正在发生的事情是你试图在把手模板中使用JS代码。这是一个常见的问题/烦恼,但这样做是有充分理由的:实际的模板应该没有逻辑和代码。模板应该“哑”,仅用于显示目的。对于您的具体示例,请在orderedList

中创建main.js时将字符串拆分移至
Template.orderList.orderList = function() {
    // Retrieved from Collection
    orderList = {
        12345: {name: "apples_mackintosh".split('_')[0], amount: 10},
        12346: {name: "oranges_sunkiss".split('_')[0], amount:5}
    };

    return orderList;
};

答案 1 :(得分:0)

首先将其存储在某个变量中,然后通过javascript将其拆分或创建一些将被调用的辅助函数并返回拆分值。