Handlebars方法调用不返回值

时间:2015-10-26 18:46:53

标签: javascript handlebars.js

我使用把手。我注册了一个调用函数的助手。

Handlebars.registerHelper("getContactCategoryById", getContactCategoryById);

功能

function getContactCategoryById(categoryId) {
    var category = sessionStorage.getItem("category");

    $.each(jQuery.parseJSON(category), function () {
        if (this.contactCategoryId == categoryId) {
            return this.name;
        }
    });
}

在我的模板中,我的函数被调用,当我调试时,getContactCategoryById返回一个值,但它从未显示在表中。 我可以看到当我看到html代码时,contact-category-id有一个data-contact-category-id标记的值。

<script id="lodger-contact-available-result-template" type="text/x-handlebars-template">
    <table id="lodgerContactAvailableTableResult" style="min-height:200" data-show-header="true" class="table table-striped" data-toggle="table" data-height="330">
    <thead>
    <tr>
    <th>Category</th>
    </tr>
     </thead>
    <tbody>
    {{#each this}}
    <tr>
    <td data-contact-category-id={{contactCategoryId}}>{{getContactCategoryById contactCategoryId}}</td>
    </tr>
    {{/each}}
    </tbody>
    </table

</script>

编辑:解决方案,需要做一个返回存在的每个并获取值

function getContactCategoryById(categoryId) {
    var category = sessionStorage.getItem("category");
    var toReturn;

    $.each(jQuery.parseJSON(category), function () {
        console.log(this.contactCategoryId, categoryId);
        if (this.contactCategoryId == categoryId) {
            toReturn = this.name;
            return false;
        }
    });

    return toReturn;
}

1 个答案:

答案 0 :(得分:2)

问题是你从jQuery.each返回,而jQuery.each本身就是一个函数,所以你的返回值被getContactCategoryById吞没了,你的助手函数undefined最终没有返回任何东西(或者总是准确地返回function getContactCategoryById(categoryId) { var category = sessionStorage.getItem("category"); var foundName = ''; $.each(jQuery.parseJSON(category), function () { if (this.contactCategoryId == categoryId) { foundName = this.name; return false; // returning false in jQuery.each stops the iteration } }); return foundName; // return the name you found } 。)

您需要做的是在找到所需内容后停止循环,然后返回循环结束后找到的内容:

DECLARE
    p_headers my_pkg.tab_headers;

    p_my_file1  BLOB := EMPTY_BLOB();
    p_my_file2  BLOB := EMPTY_BLOB();
BEGIN
    p_headers := my_pkg.tab_headers();

    /* Process that fills p_my_file1 and p_my_file2 */

    p_headers.EXTEND;

    p_headers(1).file1 := p_my_file1;
    p_headers(1).file2 := p_my_file2;
END;
/