【问题标题】:Get DOM element from template in backbone view从主干视图中的模板获取 DOM 元素
【发布时间】:2013-08-16 11:39:53
【问题描述】:

我正在使用 Backbone.js 显示人员列表及其数据。

每个人都有自己的<div>。 div 由_.template 生成,包含<input> 字段以显示人员的数据,以便对其进行调整。

还有一个带有class=".save" 的按钮。在我看来,我有一个绑定到单击此按钮的功能。我正在寻找最佳方法来获取属于模型的div 中的<input>-tags 的值。

这是我的方法,但我想知道是否有更好的方法。在我的模板中,我根据模型的 ID 为 DOM 元素动态分配了 ID。我使用相同的逻辑来找回视图中的元素。

模板

<input value="<%=name%>" id="name_<%=id%>"/>
<input value="<%=age%>" id="age_<%=id%>"/>
<input value="<%=address%>" id="address_<%=id%>"/>
<button class=".save">Save</button>

查看

events:{
    "click .save":"savePerson"
},

savePerson: function(){
    this.model.set({
        name: $("#name" + this.model.id).val(),
        address: $("#address_" + this.model.id).val(),
        age: $("#age_" + this.model.id).val()
    });
    this.model.save();
}

【问题讨论】:

    标签: javascript backbone.js underscore.js


    【解决方案1】:

    如果每个人都是具有自己模板的不同视图实例,您只需为视图模板定义选择器的范围

    模板

    <form id="<%-id%>">
      <input value="<%-name%>" name="name"/>
      <input value="<%-age%>" name="age"/>
      <input value="<%-address%>" name="address"/>
      <button class=".save">Save</button>
    </form>
    

    查看

    events:{
        "click .save":"savePerson"
    },
    
    savePerson: function(){
        this.model.set({
            name: this.$("input[name='name']").val(),
            age: this.$("input[name='age']").val(),
            address: this.$("input[name='address']").val()
        });
        this.model.save();
    }
    

    否则,如果您在同一个模板/视图实例中有很多人(不好),只需捕获当前人的 id var personId = this.$("#"+this.model.id),在上面的选择器中使用这个personId

    PS:我使用 &lt;%-value%&gt; 而不是 &lt;%=value%&gt; 来插入这个值,并让它被 HTML 转义。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多