Javascript 通过Spine.js中的this.item时,把手断裂

Javascript 通过Spine.js中的this.item时,把手断裂,javascript,handlebars.js,spine.js,Javascript,Handlebars.js,Spine.js,我正在尝试实现Spine.js文档中给出的Todo示例,如下所示: 只有我想使用把手而不是jQuery.tmpl。我用的是车把1.0.rc.1 但是,当我尝试呼叫时: template: Handlebars.compile($('#history-template').html()), render: function(){ var t = this.template(this.item); this.replace(t); return this; } 把手在此.

我正在尝试实现Spine.js文档中给出的Todo示例,如下所示:

只有我想使用把手而不是jQuery.tmpl。我用的是车把1.0.rc.1

但是,当我尝试呼叫时:

template: Handlebars.compile($('#history-template').html()),

render: function(){
    var t = this.template(this.item);
    this.replace(t);
    return this;
}
把手在
此.template(this.item)
处引发异常:

在车把lexer中,
此。_输入
返回为未定义

我的模板如下:

<script id='history-template' type='text/x-handlebars-template'>
    <div class="content-inner {{#if viewed}}msg_unseen{{/if}}">                                             
        <div>{{data}}</div>
    </div>
</script>

有什么想法吗?

问题似乎是:

  • ID不匹配--您的模板ID是
    历史模板
    ,但您试图将其选择为
    $(“#我的模板)
  • 您的数据应该像
    {“data”:“hello”,“id”:“c-0”}
    (一个对象)那样写入,不带方括号(使其成为一个数组)
  • 一旦我做了这两个更正,我就可以运行你的代码

    (另请参阅以确认#if逻辑工作正常。)


    编辑

    要使用数组形式的数据--
    {data:“hello”,id:“c-0”}
    --据我所知,要在把手模板中使用它,需要将其包装在对象中:

    var obj = { data: "hello", id: "c-0" };
    var handlebarsData = { items: obj };
    
    这样,您就可以使用把手迭代表单
    {{{#each items}}

    {{#each items}}
        <div class="content-inner {{#if viewed}}msg_unseen{{/if}}">                                             
            <div>{{data}}</div>
        </div>
    {{/each}}
    
    {{#每个项目}
    {{data}}
    {{/每个}}
    

    您传入的数据不正确

    支持将数据作为对象传递给车把。例如:

    {"foo":"bar","baz":"faz"}
    
    模板为:

    <div>{{foo}}</div>
    <div>{{baz}}</div>
    
    {{foo}
    {{baz}}
    
    将被渲染为

    <div>bar</div>
    <div>faz</div>
    
    条
    法兹
    
    Typo在上面的描述中,应该是通过#历史模板选择的。但不幸的是,仍然不能与给定的数据模型一起工作,这就是Spine处理其JSON的方式。1)我键入了一个单词。当通过#历史模板选择时,它仍然不能使用给定的数据模型。2)Spine.js似乎以该格式保存其JSON,我想宁愿使用同一个模型?@user1868231您看到我的更改数据对象的建议了吗?在您的问题中,您已将其编写为数组,但您的模板正在查找对象。我看到了,但正如我上面所说,Spine.js将其数据保存在哈希数组中。我宁愿使用Spine提供的内容。@amhou明白了…请查看我上面的更新。如果调整车把模板,并将数据包装到对象中,然后它就可以工作了。
    {"foo":"bar","baz":"faz"}
    
    <div>{{foo}}</div>
    <div>{{baz}}</div>
    
    <div>bar</div>
    <div>faz</div>