javascript - side el 的嵌套 id 中的 Backbone 渲染模板

标签 javascript jquery backbone.js

我的 html 设置是这样的。

<div id="product-module">
   <ul id="product">
      <li><input name="product" type="radio"/></li>
      <li><input name="product" type="radio"/></li>
      <li><input name="product" type="radio"/></li>
   </ul>
   <table id="quantities"/>

   <script id="myTemplate" type="text/x-handlebars-template">
        {{#each this}}
        <tr>
            <td class="quantity">
                <label class="checked" for="quantity_{{id}}">
                    <input type="radio" value="" name="quantity"> 
                    {{quantity}}
                </label>
            </td>
        </tr>
    {{/each}}
   </script>
</div>

我正在尝试设置一个事件处理程序,用于监听 li 上的点击并在数量元素中呈现模板。

我的主干 View

el: '#product-module',

template: Handlebars.compile($("#myTemplate").html()),

events: {
    "click #product li": "liClicked",
},

initialize: function(){
    this.listenTo(this.collection, 'reset', this.render);
},

render: function() {
    console.log('model ' + this.template(this.collection.toJSON()))
    this.$el.html( this.template(this.collection.toJSON()));
},

liClicked: function(event, callback){
    console.log('liClicked')
},

如果我将 el 更改为 #quantities,那么我的事件处理程序将无法在 el 之外工作。如果我将 el 更改为 #product-module,那么所有内容都会被替换。如何让我的事件处理程序监听并在 #quantities 元素中呈现模板?

我也尝试过,但没有成功

$('#quantities', this.el)

TypeError: $(...) is not a function

最佳答案

HTML

<script id="myTemplate" type="text/x-handlebars-template">
    {{#each this}}
    <tr>
        <td class="quantity">
            <label class="checked" for="quantity_{{id}}">
                <input type="radio" value="" name="quantity"> 
                {{quantity}}
            </label>
        </td>
    </tr>
    {{/each}}
</script>

<div id="product-module">
   <ul id="product">
      <li><input name="product" type="radio"/></li>
      <li><input name="product" type="radio"/></li>
      <li><input name="product" type="radio"/></li>
   </ul>
   <table id="quantities"/>
</div>

查看

el: '#product-module',

template: Handlebars.compile($("#myTemplate").html()),

events: {
    "click #product li": "liClicked",
},

initialize: function(){
    this.listenTo(this.collection, 'reset', this.render);
},

render: function() {
    var markup = this.template(this.collection.toJSON());
    // this.$() is short for this.$el.find()
    this.$('#quantities').html(markup);
},

liClicked: function(event, callback){
    console.log('liClicked')
},

关于javascript - side el 的嵌套 id 中的 Backbone 渲染模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30988239/

相关文章:

javascript - Jquery 菜单和照片库在 IE 中不起作用

javascript - Jquery 无法从 WCF REST 服务获取响应

javascript - 不要在循环错误中创建函数,我无法修复

javascript - QUnit 异步测试停止功能不起作用

javascript - 为给定的 object_id 获取和呈现集合的最佳方式

javascript - render 没有被一个 api 调用,而是被另一个 api 调用

javascript - 新的子元素包含父元素

php - 获取存储在隐藏输入元素中的 JSON 数据?

javascript - 如何在 backgrid.js 中使用 "No Record Found"

javascript - 在 Canvas 中绘制多个圆弧的 JQuery 动画问题